轉(zhuǎn)載于:http://blog.csdn.net/jiachunfeng/article/details/6448186 http://justcoding./blog/587876
event對(duì)象
IE 中可以直接使用 event 對(duì)象,,而 FF 中則不可以,,解決方法之一如下:
var theEvent = window.event || arguments.callee.caller.arguments[0];
第二種是將 event 作為參數(shù)來(lái)傳遞:
function xxx(e){var theEvent = window.event || e;}
srcElement 和 target
在 IE 中 srcElement 表示產(chǎn)生事件的源,,比如是哪個(gè)按鈕觸發(fā)的 onclick 事件,F(xiàn)F 中則是 target,。
var theEvent = window.event || arguments.callee.caller.arguments[0];
var theObj=theEvent.target || theEvent.srcElement;
例子:
document.onclick = function(e){
var theEvent = window.event || e;
var theObj=theEvent.target || theEvent.srcElement;
function clickAction(){
var theEvent = window.event || arguments.callee.caller.arguments[0];
var theObj=theEvent.target || theEvent.srcElement;
// do something;
}
function clickAction(e){
var theEvent = window.event || e;
var theObj=theEvent.target || theEvent.srcElement;
// do something;
}
event.keyCode 和event.which
FF不支持window.event.keyCode,,代替著是event.which
列子:
//在網(wǎng)頁(yè)上面屏蔽tab鍵的代碼
document.onkeydown = function (e){
var theEvent = window.event || e;
var code = theEvent.keyCode || theEvent.which;
if(code == 9){
return false;
}
}
============
Query對(duì)DOM的事件觸發(fā)具有冒泡特性。有時(shí)利用這一特性可以減少重復(fù)代碼,,但有時(shí)候我們又不希望事件冒泡,。這個(gè)時(shí)候就要阻止 jQuery.Event冒泡。
在jQuery.Event 的文檔 中的開(kāi)頭得知,,jQuery.Event對(duì)象是符合W3C標(biāo)準(zhǔn)的一個(gè)事件對(duì)象,,同時(shí)jQuery.Event免去了檢查兼容IE的步驟。
jQuery.Event提供了一個(gè)非常簡(jiǎn)單的方法來(lái)阻止事件冒泡:event.stopPropagation();
- $("p").click(function(event){
- event.stopPropagation(); // do something
- })
- <span style="font-size:18px;">$("p").click(function(event){
- event.stopPropagation(); // do something
- })</span>
但是這個(gè)方法對(duì)使用live 綁定的事件沒(méi)有作用,,需要一個(gè)更簡(jiǎn)單的方法阻止事件冒泡:return false;
- $("p").live("click", function(){
- $(this).after("Another paragraph!");
- return false;
- });
- <span style="font-size:18px;">$("p").live("click", function(){
- $(this).after("Another paragraph!");
- return false;
- });</span>
另外 JavaScript 阻止冒泡
阻止冒泡事件的方法有兩種,第一種是IE的方法,,第二種是DOM方法,,至于為什么要分為兩種方法去討論之,這里就不做討論了,,總之是瀏覽器一些蹩腳的問(wèn)題,,好了廢話不說(shuō)了,直接貼代碼了:
- //阻止冒泡事件
- function stopBubble(e) {
- if (e && e.stopPropagation) {//非IE
- e.stopPropagation();
- }
- else {//IE
- window.event.cancelBubble = true;
- }
- }
- <span style="font-size:18px;"> //阻止冒泡事件
- function stopBubble(e) {
- if (e && e.stopPropagation) {//非IE
- e.stopPropagation();
- }
- else {//IE
- window.event.cancelBubble = true;
- }
- }</span>
舉個(gè)例子:就是谷歌首頁(yè)的更多選項(xiàng)吧,,不知道的可以去看看http://www.google.com/ ,。
這里要應(yīng)用兩個(gè)點(diǎn)擊事件,,一個(gè)是div.onclick,另一個(gè)就是document.onclick,,那么問(wèn)題就出現(xiàn)了,,在調(diào)用 div.onclick的時(shí)候,由于冒泡事件的存在,,會(huì)自動(dòng)的調(diào)用document.onclick,,由于冒泡的順序是從里向外的
(div->body->document->html)所以div.onclick事件就會(huì)被覆蓋掉,也就不會(huì)執(zhí)行了,,解決的方案其實(shí)也是很簡(jiǎn)單的哦,,就是在執(zhí)行div.onclick的時(shí)候阻止冒泡事件就好了,那怎么阻止呢,,就調(diào)用上面的函數(shù)就ok了,!哈哈!
ps:在介紹一下阻止瀏覽器默認(rèn)行為的方法,,大同小異,,這里就不再贅述了。
- function stopDefault(e) {
- //阻止默認(rèn)瀏覽器動(dòng)作(W3C)
- if (e && e.preventDefault)
- e.preventDefault();
- //IE中阻止函數(shù)器默認(rèn)動(dòng)作的方式
- else
- window.event.returnValue = false;
- return false;
- }