IE中奇怪的Javascript错误

时间:2012-08-01 10:30:16

标签: javascript jquery javascript-events

.stopPropagation()

中为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 个答案:

答案 0 :(得分:6)

在IE中我们没有在事件对象的javascript中提供stopPropogation方法。如果您将在谷歌搜索,您将在基于webkit的浏览器中找到事件对象的不同实现。所以为了纠正jQuery已经给出了一个处理它的接口,所以你应该使用jQuery方式做事件来阻止这个错误。

您可以阅读本文以获得更多说明http://www.quirksmode.org/js/introevents.html

答案 1 :(得分:6)

替换 e.stopPropagation(); if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true;为我工作

谢谢

答案 2 :(得分:3)

让您的toggle处理程序接受来自jQuery的事件参数:

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

如果你不这样做,那么在调用ddlShow时,参数event会解析为window.event,这是一个尚未被jQuery“规范化”的对象,用于跨浏览器一致性。

答案 3 :(得分: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); }...

答案 4 :(得分:0)

JQuery默认传递事件对象,你只需在函数参数中声明它就可以在函数中使用它。

$sortBy.toggle(function(event){

    // Do your stuff here

})

答案 5 :(得分:0)

此外,不建议使用event作为参数名称。

event指的是全局事件对象。定义类似e

的内容
function(e, options){
    e.stopPropagation();
    //do stuff here    
}