2011-06-09 60 views
5

爲了整理我的jQuery,我期待爲事件處理程序的各種元素創建一個「確認」類,以便我可以啓動一個快速確認框,以便用戶可以確認其操作。防止一個jQuery事件與另一個

如果用戶在確認框上單擊取消,則應取消任何以下事件,但這應該是而不是是永久性的,例如,再次觸發事件應該調出確認並重新開始。如果我能解決這個問題,我可以讓任何敏感的操作有一個確認問題,以確保用戶點擊。

例如:

$('.confirm').click(function() { 
    if(!confirm('Are you sure?')) { 
     // Stop any other click events on $(this) from happening this instance. 
    } 
}); 

$('.clicker').click(function() { 
    alert('it happened'); 
}); 

<a class="clicker confirm">Click me</a> 

所需的輸出將是取消確認將取消click事件,但不完全禁用它。

回答

5

您可以使用event.stopImmediatePropagation()從jQuery的:

$('.confirm').click(function(event) { 
    if(!confirm('Are you sure?')) { 
     event.stopImmediatePropagation(); 

     // Stop any other click events on $(this) from happening this instance. 
    } 
}); 

$('.clicker').click(function() { 
    alert('it happened'); 
}); 

test case on jsFiddle

+0

謝謝!這是我想要做的。在我的回答中搞砸了兩次,所以決定刪除它)感謝提醒我的心! – mekwall 2011-06-09 11:39:24

+0

我想補充,在窗體的情況下,當您拒絕確認時,event.preventDefault()也需要停止表單的觸發。 – Dunhamzzz 2011-06-13 08:52:43

0
$('.confirm').click(function() {  
return confirm('Are you sure?'); 
}); 

你也可以使用在側event.stopPropagation()點擊事件停止furthure傳播。

+1

我發現,返回false沒有被觸發停止其他點擊事件。 – Dunhamzzz 2011-06-09 11:42:31

+0

不幸的是,'.disablePropagation()'不存在。這是我的錯,它應該是'.stopPropagation()',它也不起作用。尼古拉提出了正確的解決方案! – mekwall 2011-06-09 11:43:08

+0

哦!我的錯誤,但'.stopPropagation()'應該工作 – Vivek 2011-06-09 11:50:00

相關問題