Jquery属性选择器单击

时间:2016-08-18 14:14:34

标签: javascript jquery html

我正在尝试选择具有特定属性的<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>

3 个答案:

答案 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");