5

得到一个奇怪的.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();
}

收到以下错误

对象不支持属性或方法“停止传播”

代码在Chrome和中运行良好FX

我该如何解决这个问题?

注意:相同的代码在没有object options.

4

6 回答 6

6

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

谢谢

于 2014-06-27T09:44:26.117 回答
6

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

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

于 2012-08-01T10:48:56.500 回答
3

Have your toggle handlers accept the event parameter from jQuery:

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

If you do not do this, then when calling ddlShow the argument event resolves to window.event, which is an object that has not been "normalized" by jQuery for cross-browser consistency.

于 2012-08-01T10:32:54.540 回答
1

Here:

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

Then:

$sortBy.toggle(function(event){ ... ddlShow(event, options); }...
于 2012-08-01T10:32:32.497 回答
0

JQuery by default passes the event object, you just have to declare it in the function arguments to use it within the function.

$sortBy.toggle(function(event){

    // Do your stuff here

})
于 2012-08-01T10:38:12.527 回答
0

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

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

function(e, options){
    e.stopPropagation();
    //do stuff here    
}
于 2012-08-01T10:43:40.667 回答