我试图在单击一个元素时添加数据名称属性,然后在单击该元素时执行其他操作。
$(".btn01").on("click", function() {
$(".next").attr("data-name", "btn02");
});
$("[data-name='btn02']").on("click", function() {
console.log("I clicked this button");
});
它正在DOM中更新,但是不能正常工作吗? 有什么想法吗?
答案 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");
}
});