在.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'
代码在Chrome
和FX
中正常工作。
我该如何解决这个问题?
注意:相同的代码在没有object options
的情况下正常工作。
答案 0 :(得分:6)
您可以阅读本文以获得更多说明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
}