2012-05-11 60 views
1

我點擊頂部<tr>發生事件,然後點擊tr > td > button也發生事件。當我點擊tr > td > button時,相關的onclick()函數正在運行,但與<tr>相關的功能也在之前運行。如何停止運行下一個功能?

像:

<tr onclick="run_tr();"> 
    <td><input type="button" onclick="run_td();" /></td> 
</tr> 

我怎麼能停止自動調用通過單擊按鈕下一個電話?

+1

可能重複[禁用父的onclick事件元素](http://stackoverflow.com/questions/5445719/disable-the-onclick-event-of-a-parent-element) –

+0

你應該避免內聯腳本 – Joseph

回答

2

在按鈕onclick功能,你需要停止事件冒泡:

event.stopPropagation(); 

按照與您的代碼:

HTML:

<input type="button" onclick="run_td(event);" /> 

JS:

function run_td(event) { 
    if (event.stopPropagation) { 
     event.stopPropagation(); 
    } 
    event.cancelBubble = true; 
    // ... rest of your code. 
} 
+2

不,這是錯誤的方法......這將例如阻止瀏覽器跟蹤鏈接,但不會停止事件傳播。 –

+0

我已經更新了我的答案 – antyrat

+2

仍然,'preventDefault()'與問題無關...... –

1

您必須使用方法e.stopPropagation()來停止事件的傳播。欲瞭解更多信息,請訪問此鏈接:http://www.quirksmode.org/js/events_order.html#link9

+0

對於OP:記住同時使用if(event.stopPropagation)event.stopPropagation()和event.cancelBubble = true來處理W3C和IE事件模型。 – RobG

+0

是的,我忘記了在我的回答中提到,但它在頁面中解釋我鏈接 – 3rgo

+0

我無法使用它:(如何正確使用它??? –

0

我不明白你爲什麼不能使用推薦的方法,這裏有一個例子:的

<div onclick="alert('div click called');"> 
    Click here to see div onclick 
    <button onclick=" 
    (event.stopPropagation && event.stopPropagation()); 
    event.cancelBubble = true; 
    alert('stopped click'); 
    ">Button click but no div click</button> 
</div>