2011-09-13 74 views
3

我有可點擊的行,會觸發鏈接onclick事件,但trigger()會在tr.clickable上產生新的點擊事件並進入循環。如何防止這一點?jQuery trigger('click')問題

<table> 
    <tr class="clickable"> 
     <td>Test row</td> 
     <td><a href="#" onclick="alert('click');" class="trigger"></a></td>   
    </tr> 
</table> 

JS:

$('tr.clickable').click(function(){ 
    var trigger = $(this).find('a.trigger'); 
    trigger.trigger('click'); 
}); 

現場演示here

+0

你爲什麼試圖做你在做什麼? @simoncereska有正確的答案,但推理可能是錯誤的,取決於你實際上想要做什麼。你已經明確地告訴它讓自己陷入循環...... –

+0

我需要類似的東西:用戶點擊一行,內部''的onclick函數被稱爲**只有一次**並完成。 – marioosh

+0

在這種情況下,@Matt有正確的方法。 –

回答

6

這是下降到事件在JavaScript冒泡。這是一個有點你此刻已經有了一個奇怪的設置,而是一種方式來解決這將是停止click事件冒泡的a標籤:

$('tr.clickable a').click(function (e) { 
    e.stopPropagation(); 
}); 

Fiddle

或者你不能火click觸發如果目標事件是相同的元素:

$('tr.clickable').click(function(e){ 
    var trigger = $(this).find('a.trigger').not(e.target); 
    trigger.trigger('click'); 
}); 

Fiddle

我猜可能是最好的解決方案。

+0

我會用$('td .trigger')取代onclick。click(function(e){e.stopPropagation(); alert ('click');});不使用內聯JavaScript是一種很好的做法。 – Luigi

+0

非常感謝解釋和工作解決方案! – marioosh

2

刪除trigger.trigger('click');和多數民衆贊成:)

+0

不起作用:'http:// jsfiddle.net/fg6za/12 /' – marioosh

0

試試這個腳本

$('tr.clickable').click(function(){ 
     alert('Click'); 
}); 

直播demo

0

我會建議使用事件參數,檢查什麼是點擊的目標。

$('tr.clickable').click(function(e){ 
    if (e.target.nodeName != 'A') { 
    var trigger = jQuery(this).find('a.trigger'); 
    trigger.trigger('click'); 
    } 
}); 
相關問題