2012-08-01 84 views
4

獲得了.stopPropagation()一個奇怪的錯誤在IE怪異的JavaScript錯誤在IE

我的代碼如下,

$(document).ready(function(){ 
    var options = { 
    $this: "", 
    $menuItems: $(".mainMenu > li"), 
    $blueBar: $(".blueBar"), 
    $submenuBg: $("#submenuBg"), 
    $sortOptions: $(".sortOptions"), 
    $submenu: $(".submenu"), 
    submenuClass: ".submenu", 
    blueBarClass: ".blueBar", 
    selectedClass: "selected", 
    sortOptionsClass: ".sortOptions", 
    subSubmenu: "ul", 
    subSubmenuClass: "sub-submenu"  
    }; 

    $sortBy.toggle(function(){ 
      options.$this = $(this); 
      ddlShow(event, options); 
     }, 
     function(){ 
      options.$this = $(this); 
      ddlHide(options); 
     } 
    ); 

}); 

var ddlShow = function(event, options){ 
    event.stopPropagation(); 
    options.$this.children(options.sortOptionsClass).show();  
} 

var ddlHide = function(options){ 
options.$this.children(options.sortOptionsClass).hide(); 
} 

收到以下錯誤

對象不支持屬性或方法'stoppropagation'

代碼在ChromeFX中正常工作。

我該如何解決這個問題?

注意:相同的代碼工作正常,沒有object options

回答

6

在IE中我們沒有在事件對象的JavaScript提供stopPropogation方法。如果你將在谷歌搜索,你會發現不同的基於IE和IE瀏覽器的事件對象的實現。所以爲了糾正jQuery給出的單一接口來處理它,所以你應該使用jQuery做事件的方式來阻止這個錯誤。

您可以閱讀這篇文章,以獲得更多的澄清http://www.quirksmode.org/js/introevents.html

+0

btw IE9和進一步似乎已經實施stopPropagation方法 - 但在我的情況類似的錯誤發生,因爲我試用的域名是在兼容模式下運行的網站列表 – 2017-01-23 15:14:21

1

這裏:

$sortBy.toggle(function(){ <-- you must get the event object from jquery. 
     options.$this = $(this); 
     ddlShow(event, options); 
    }, 
    function(){ 
     options.$this = $(this); 
     ddlHide(options); 
    } 
); 

然後:

$sortBy.toggle(function(event){ ... ddlShow(event, options); }... 
3

有你toggle處理程序接受jQuery的事件參數:

$sortBy.toggle(function(event){ // ADDED PARAMETER 
     options.$this = $(this); 
     ddlShow(event, options); 
    }, 

如果你不這樣做,那麼當調用ddlShow參數event解析爲window.event,這是一個未被jQuery「標準化」的對象,用於跨瀏覽器一致性。

+0

好,爲什麼它在'chrome'和'FX'工作,然後? – 2012-08-01 10:38:26

+0

@paiCode:[因爲FF支持這個](https://developer.mozilla.org/en/DOM/event.stopPropagation),而IE只從版本9開始。與Chrome類似。 – Jon 2012-08-01 10:58:40

0

JQuery默認傳遞事件對象,您只需在函數參數中聲明它以在函數中使用它。

$sortBy.toggle(function(event){ 

    // Do your stuff here 

}) 
0

此外,不建議使用event作爲參數名稱。

event引用全局事件對象。定義類似e

function(e, options){ 
    e.stopPropagation(); 
    //do stuff here  
} 
5

取代 e.stopPropagation();if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true;爲我工作

感謝