附加属性[数据名称],然后单击使用此数据属性

时间:2018-11-28 14:27:05

标签: javascript jquery html attr

我试图在单击一个元素时添加数据名称属性,然后在单击该元素时执行其他操作。

$(".btn01").on("click", function() {
    $(".next").attr("data-name", "btn02");
});

$("[data-name='btn02']").on("click", function() {
    console.log("I clicked this button");
});

它正在DOM中更新,但是不能正常工作吗? 有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您必须使用事件委托,因为在第二个单击事件[data-name='btn02']的选择器中使用的属性是由JS代码动态创建的:

$(".btn01").on("click", function() {
  $(".next").attr("data-name", "btn02");
});

$("body").on("click", "[data-name='btn02']", function() {
  console.log("I clicked this button");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button type="button" class="btn01">CLICK ME then click the span bellow</button>
<br><br>
<span class="next">Next span</span>

答案 1 :(得分:1)

尝试以下操作,使用事件委托将事件附加到“ [data-name ='btn02']”,因为$(“ [data-name ='btn02']”))元素在$(“之前不存在。 btn01”)。

$(".btn01").on("click", function() {
  $(".next").attr("data-name", "btn02");
});

$(document).on("click", "[data-name='btn02']", function() {
  console.log("I clicked this button");
});

答案 2 :(得分:-1)

如果您只是想这样做,那么需要在第二个按钮之前先单击第一个按钮,则可以为此使用boolean变量:

var firstButtonClicked = false;
$(".btn01").on("click", function() {
    firstButtonClicked = true;    
});
// the second button
$(".next").on("click", function() {
    if (firstButtonClicked == true) {
        console.log("I clicked this button after the first one");
    }
});