2012-08-01 39 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;为我工作

感谢