Javascript Jquery属性选择器单击
我正在尝试选择具有特定属性的Javascript Jquery属性选择器单击,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试选择具有特定属性的div。我希望仅当存在具有true值的特定attribute时,才单击div。问题是,如果我再次单击div,则警报仍会显示,而它具有具有false值的属性 HTML 当前代码的问题是当元素具有属性时附加事件。之后更改属性的事实不会删除该事件处理程序,因此始终会调用它 有几种方法可以解决这个问题 第一种方法是使用委托事件处理程序,它将始终考虑当前属性值: $(document).on('click', 'a[data-spinner="true"]', function
div
。我希望仅当存在具有true
值的特定attribute
时,才单击div
。问题是,如果我再次单击div
,则警报仍会显示,而它具有具有false
值的属性
HTML
当前代码的问题是当元素具有属性时附加事件。之后更改属性的事实不会删除该事件处理程序,因此始终会调用它
有几种方法可以解决这个问题
第一种方法是使用委托事件处理程序,它将始终考虑当前属性值:
$(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()
附加事件-这取决于页面中设置数据
attributes'值的其他逻辑。当前代码的问题是,在元素具有属性时附加事件。之后更改属性的事实不会删除该事件处理程序,因此始终会调用它
有几种方法可以解决这个问题
第一种方法是使用委托事件处理程序,它将始终考虑当前属性值:
$(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()
附加事件-这取决于页面中设置数据
属性值的其他逻辑。当您更改数据spnner
的值时,jQuery不会重新声明事件。
您必须以编程方式处理该问题,如下所示:
$("a[data-spinner]").click(function() {
var $this = $(this);
if($this.data('spinner')){
alert("clicked");
}
$this.data('spinner',false);
});
更改data spnner
的值时,jQuery不会重新声明事件。
您必须以编程方式处理该问题,如下所示:
$("a[data-spinner]").click(function() {
var $this = $(this);
if($this.data('spinner')){
alert("clicked");
}
$this.data('spinner',false);
});
我想补充Rory McCrossan的回答,因此,您还应该使用以下方法取消设置属性:
我想补充Rory McCrossan的回答,因此,您还应该使用以下方法取消设置属性:
请在第一次单击后删除事件处理程序,或使用事件委派。请在第一次单击后删除事件处理程序,或使用事件委派。您刚刚击败了我:)您刚刚击败了我:)