[英]Jquery Attribute selector click
我正在嘗試選擇具有特定屬性的div
。 我想div
被點擊只有在有特定的attribute
與true
價值。問題是,如果我點擊div
再次提醒仍顯示,而它的attribute
與false
值。
的HTML
<a href="#" data-spinner="true">Click Here</a>
jQuery的
$("a[data-spinner='true']").click(function() {
$("a[data-spinner='true']").attr("data-spinner",false);
alert("clicked");
});
當前代碼的問題是,當元素具有屬性時,您將附加事件。 之后更改屬性的事實不會刪除該事件處理程序,因此始終會調用它。
有幾種方法可以解決此問題。
第一種是使用委托事件處理程序,該事件處理程序將始終考慮當前屬性值:
$(document).on('click', 'a[data-spinner="true"]', function() {
$(this).attr("data-spinner", false);
alert("clicked");
});
另一種方法是檢查單擊處理程序本身內的屬性狀態:
$("a[data-spinner]").click(function() {
if ($(this).data('spinner')) {
$(this).data('spinner', false)
alert("clicked");
});
});
請注意,此方法允許您使用data()
方法,這是更好的做法。
您也可以在第一次單擊時使用off()
刪除事件處理程序,或僅使用one()
附加事件-取決於頁面中設置data
屬性值的其他邏輯。
當您更改data-spnner
的值時,jQuery不會重新聲明該事件。 您必須改為以編程方式處理該問題,如下所示:
$("a[data-spinner]").click(function() {
var $this = $(this);
if($this.data('spinner')){
alert("clicked");
}
$this.data('spinner',false);
});
我要在Rory McCrossan的回答中添加一點,相應於此 ,您還應該使用removeAttr取消設置屬性:
$("a[data-spinner='true']").removeAttr("data-spinner");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.