我正在尝试选择具有特定属性的<set name="viewScope.errorCode" value="flowScope.enrollresponse.responseCode" />
。我希望仅在存在具有div
值的特定div
时才点击attribute
。问题是,如果我再次点击true
,则警报仍会显示而div
的值为attribute
。
HTML
false
Jquery的
<a href="#" data-spinner="true">Click Here</a>
答案 0 :(得分:5)
当前代码的问题是当元素具有属性时附加事件。之后更改属性的事实不会删除该事件处理程序,因此始终会调用它。
有几种方法可以解决这个问题。
第一种是使用委托事件处理程序,它始终考虑当前属性值:
$(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
的页面中的其他逻辑属性&#39;值。
答案 1 :(得分:0)
当您更改data-spnner
的值时,jQuery不会重新声明该事件。
你必须以编程方式处理它,如下所示:
$("a[data-spinner]").click(function() {
var $this = $(this);
if($this.data('spinner')){
alert("clicked");
}
$this.data('spinner',false);
});
答案 2 :(得分:0)
我要添加Rory McCrossan的答案,相应于this,您还应该使用removeAttr取消设置属性:
$("a[data-spinner='true']").removeAttr("data-spinner");