IE中奇怪的JavaScript消息

Weird JavaScript message in IE

本文关键字:JavaScript 消息 IE      更新时间:2024-06-05

IE 中获取.stopPropagation()的奇怪错误

我的代码如下:

$(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"

代码在Chrome和Firefox中运行良好。

我该如何解决此问题?

注意:如果没有object options,同样的代码也可以正常工作。

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

你可以阅读这篇文章来获得更多的澄清http://www.quirksmode.org/js/introevents.html

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

感谢

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

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

如果不执行此操作,那么在调用ddlShow时,参数event将解析为window.event,这是一个未被jQuery"规范化"以实现跨浏览器一致性的对象。

此处:

$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); }...
JQuery默认情况下传递事件对象,只需在函数参数中声明即可在函数中使用。
$sortBy.toggle(function(event){
    // Do your stuff here
})

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

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

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