在firefox和IE上使用event.stopPropagation()

时间:2013-04-19 19:19:02

标签: jquery internet-explorer firefox stoppropagation

为什么这段代码不适用于Firefox和IE? 它对铬很好。

$(document).click(function(e) {
    if ($(".contentIconDesk").hasClass('markIconDesk')) {           
        $(".contentIconDesk").removeClass('markIconDesk');          
        wndSelected = "";   
    }       
});

function markMe(icon, wnd) {
    event.stopPropagation();            
    if ($('#'+icon).hasClass('markIconDesk')) {
        $(".contentIconDesk").removeClass('markIconDesk');
        wndSelected = "";               
    } else {
        $(".contentIconDesk").removeClass('markIconDesk');
        $('#'+icon).addClass('markIconDesk');
        wndSelected = wnd;                  
    }       
};

在我的HTML中某些div的事件MarkMe();中调用函数onClick()。问题在于event.stopPropagation()。当我点击添加课程时,浏览器会点击$(document)

如果有一个好的建议,而不是使用上面的代码,它会很棒。

4 个答案:

答案 0 :(得分:5)

你可以试试这个。对于HTML中的div,请按以下方式对其进行修改:

<div id="something1" onclick="markMe('icon1', 'wnd1', event)">
<div id="something2" onclick="markMe('icon2', 'wnd2', event)">
<div id="something3" onclick="markMe('icon3', 'wnd3', event)">

在你的js中使用它像:

function markMe(icon, wnd, e) {

    if (!e) var e = window.event;
    e.stopPropagation();

    $(".contentIconDesk").removeClass('markIconDesk');
    if ($('#' + icon).hasClass('markIconDesk')) {
        wndSelected = "";
    } else {
        $('#' + icon).addClass('markIconDesk');
        wndSelected = wnd;
    }
};

答案 1 :(得分:3)

IE在它的DOM中不支持stopPropagation方法。您可以使用event.cancelBubble = true(我的意思是,事件对象的cancelBubble属性)。看看this

答案 2 :(得分:1)

因为在这段代码中未定义event

event.stopPropagation();

答案 3 :(得分:1)

您需要将事件作为MarkMe函数

的参数传递
function markMe(icon, wnd, event) {
   event.stopPropagation(); 
   //...
}

然后当你打电话时,它应该是这样的:

$('#myDiv').click(function(e) {
    //...
    MarkMe(icon, wnd, e);
});