2010-03-05 33 views
1

我想任何元素,但一個是關於一個事件執行函數:我怎麼上的任何元素,但一個與jQuery的事件執行的功能?

$(":not('#myelement')").bind('mousedown', function() { 
    console.log('mousedown event'); 
}); 

但是當我點擊#myelement,反正是執行函數,因爲選擇器中選擇所有的家長。此外,該功能針對每個父母執行。 如何我: -execute功能只有一次? - 不執行我的元素上的功能?

下面是完整的問題:

$("#current_page a").toggle(
    function(){ 
     $("#current_menu").hide();      
     return false; 
    }, 
    function(){ 
     $("#current_menu").show(); 
     return false; 
    } 
); 

$(":not(#current_page a)").bind('mousedown',function() {    
    $("#current_menu").hide(); 
}); 

當「#current_page一個」點擊時,觸發鼠標按下事件,我不想。

感謝 七月

回答

0

兩個選項:

  1. 你可以有處理程序檢查事件的目標,並退出,如果它是壞的:

    $(':not(#foo)').mousedown(function(ev) { 
        if ($(ev.target).is('#foo')) return false; 
        // other stuff 
    }); 
    
  2. 你可以添加特別是對壞分子和處理使其殺事件:

    $(':not(#foo)').mousedown(...); 
    $('#foo').mousedown(function() { return false; }); 
    
+0

的問題是,$(「:不是(#foo)」 )也選擇#foo的父元素。所以,當我迷上foo的時候,我也對父母產生了興趣,並且觸發了這個事件。 – jul 2010-03-05 15:39:33

1

'#myelement'刪除您的報價...只是:not(#myelement)。你應該很好。

編輯:通過檢查event.target來解決潛在的問題冒泡添加事件一檢查:

function eventFunc(event) { 
    if ($(event.target).attr("id") !== 'myelement') { 
     // do work 
    } 
} 
+0

它仍然觸發父母的事件。 – jul 2010-03-05 15:40:00

0

這裏是一個完整的例子,應該做你需要什麼...

$(":not(#myelement)").bind('mousedown', function(event) { 
    console.log('mousedown event'); 
    event.stopPropagation() 
}); 

重要提示(基於七月的評論)

的事件將被添加到每個元素在頁面上,除了與「myelement」的ID的一個元素。我已經把這個快速演示一起展示......

你會注意到的onclick警報(「HI」)不會被調用,無論你在哪裏點擊 - 這表明被阻止事件傳播。您還會注意到,當你點擊「myelement」,對於父母的事件被稱爲 - 因爲你沒有添加事件處理程序到這個元素。我將在下面解釋如何解決這個問題。這是一個例子。

<div oclick="alert('hi');" id="a"> 
    <div id="b">One</div> 
    <div id="c">One</div> 
    <div id="d">One</div> 
    <div id="e">One</div> 
    <div id="f">One</div> 
    <div id="myelement">Not One</div> 
    <div id="h">One</div> 
    <div id="i">One</div> 

</div> 

<script type="text/javascript" src="jquery.min.js"></script> 
<script type="text/javascript"> 
    $(":not(#myelement)").bind('mousedown', function(event) { 
     alert($(this).attr("id")); 
     event.stopPropagation() 
    }); 
</script> 

而你需要做以下從導致父元素觸發停止「myelement」點擊:

$(":not(#myelement)").bind('mousedown', function(event) { 
    console.log('mousedown event'); 
    // event.stopPropagation() - you might not want this anymore - up to you... 
    // I think you wanted clicks on "myelement" to be ignored, rather than 
    // event propagation to be prevented 
}); 
$("#myelement").bind('mousedown', function(event) { 
    event.stopPropagation() 
}); 
+0

它仍然觸發父母的事件。 – jul 2010-03-05 15:34:23

+0

@jul - 見我的回答說明這方面的更多信息。 – Fenton 2010-03-08 08:22:45

相關問題