[英]JQuery: Disable click event
我想禁用我頁面上的所有單擊事件,但是某些事件仍在被調用,假設我有如下所示的html
<div id='parent'>
<table>
<tr>
<td><input type = 'text'/></td>
<td><select><option>A</option><option>B</option></select></td>
<td><a href='#' onclick="alert('Called')">Click </a></td>
</tr>
<tr>
<td>dscsdcd</td>
<td>dscsdcd</td>
<td>dscdscdsc</td>
</tr>
<tr>
<td>sdcdsc</td>
<td>dssdcdsc</td>
<td><input type='submit' value='Button'/></td>
</tr>
</table>
</div>
和腳本如下
$('#parent').click( function(e)
{
e.stopPropagation();
e.preventDefault();
e.stopImmediatePropagation();
return false;
});
當我單擊錨標記時,它會向Called
發出警告,因為我正在為其父項禁用事件,因此不應Called
該Called
。 看起來錨標記覆蓋了onclick
,如果是那么如何防止呢? 如果沒有,那么解決方案是什么?
只需從具有onclick
屬性的元素中刪除它,然后使用.off('click')
方法將'click'事件解除綁定
$('#parent *[onclick]').removeAttr('onclick').off('click');
在這里, onclick
屬性具有更高的優先級。 您可以循環<a>
元素並取消設置此屬性:
$('#parent a').each(function () {
$(this).attr('onclick', '');
}).click(function () {
// ...
});
試試這個插件來臨時禁用onclick
和jQuery click
事件:-
$.fn.disableClick = function (disable){
this.each(function() {
if(disable){
if(this.onclick)
$(this).data('onclick', this.onclick).removeAttr('onclick');
if($._data(this, 'events') && $._data(this, 'events').click)
$(this).data('click', $.extend(true, {}, $._data(this, 'events').click)).off('click');
}
else{
if($(this).data('onclick'))
this.onclick = $(this).data('onclick');
if($(this).data('click'))
for(var i in $(this).data('click'))
$(this).on('click', $(this).data('click')[i].handler);
}
});
return this;
};
//disable clicks
$('#parent *').disableClick(true);
//enable clicks
$('#parent *').disableClick(false);
您應該使用一個屬性來禁用所有功能。
var nodes = document.getElementById("parent").getElementsByTagName('*');
for(var i = 0; i < nodes.length; i++) {
nodes[i].disabled = true;
}
不幸的是,禁用對錨標記無效。
在那里,您應該使用:
var nodes = document.getElementById("parent").getElementsByTagName('a');
for(var i = 0; i < nodes.length; i++) {
nodes[i].onclick = function(e){
e.preventDefault();
// YOUR CODES HERE
}
}
嘗試根據需要將這兩種方法結合起來
如果要對該div下的任何元素禁用它,則必須鍵入:
$('#parent *').click( function(e)
{
e.stopPropagation();
e.preventDefault();
e.stopImmediatePropagation();
return false;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.