当我更改按钮的ID时,我找不到新的id。(“click”)。函数console.log()确实检测到它已被更改但我无法使用on()函数检测到它。
HTML:
<form id="formName" action="" method="post">
<input type="submit" id="submitBtn" value="Submit" />
</form>
<button id="change">Change</button>
JS:
$("#change").on("click", function(){
$("#submitBtn").attr("id", "NewBtn");
});
$("#formName").submit(function(e){
e.preventDefault();
});
$("#NewBtn").on("click", function(){
alert("Hello");
});
所以我点击更改后需要它提醒“你好”。它确实改变了我用inspect元素检查过的id。
答案 0 :(得分:5)
更改
$("#NewBtn").on("click", function(){
到
$(document).on("click", "#NewBtn", function(){
原因是您希望使用delegate .on()形式的。这个调用有点不同,因为它需要一个“字符串”作为第二个参数。该字符串是“动态”元素的选择器,而主选择器需要是父容器(不是动态创建的)或document
本身。
答案 1 :(得分:0)
您是第一次在页面加载时为newBtn设置onclick事件,但遗憾的是newBtn当时不可用。因此在更改id后,它不会触发newBtn的onclick函数。
你可以做一件事让它工作,在你正在改变id的同一个函数里面为newBtn设置onclick事件。
$("#change").on("click", function(){
$("#submitBtn").attr("id", "NewBtn");
// set on click event for new button
$("#NewBtn").on("click", function(){
alert("Hello");
});
});
答案 2 :(得分:-1)
.attr()
函数没有有回调,因此除非您使用setInterval
设置间隔,否则无法检查它,但函数本身很快就会执行,所以您不会需要它。
为解决手中的问题,tymeJV提出的事件委托是正确的方法。