1

为什么这段代码不适用于 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

4 回答 4

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;
    }
};
于 2013-04-19T19:40:43.377 回答
3

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

于 2013-08-23T18:15:33.707 回答
1

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

event.stopPropagation();
于 2013-04-19T19:21:10.447 回答
1

您需要将事件作为MarkMe函数的参数传递

function markMe(icon, wnd, event) {
   event.stopPropagation(); 
   //...
}

然后当你调用它时,它应该是这样的:

$('#myDiv').click(function(e) {
    //...
    MarkMe(icon, wnd, e);
});
于 2013-04-19T19:24:04.073 回答