1

当我更改按钮的 id 时,我找不到带有 on.("click") 的新 id。函数 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"); 
});

所以我需要它在我点击更改后提醒“你好”。它确实改变了我用检查元素检查的 id。

小提琴:http: //jsfiddle.net/WvbXX/

4

3 回答 3

5

改变

$("#NewBtn").on("click", function(){

$(document).on("click", "#NewBtn", function(){

这样做的原因是您想要使用.on()的委托形式。这个调用有点不同,因为它需要一个“字符串”作为第二个参数。该字符串是您的“动态”元素的选择器,而主选择器需要是父容器(不是动态创建)或本身。document

jsFiddle

于 2013-05-27T17:14:26.260 回答
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"); 
});
});
于 2013-05-27T17:29:39.057 回答
-1

.attr()函数没有回调,因此无法检查它,除非您使用设置间隔setInterval但函数本身很快就会执行,因此您不需要它。

tymeJV提出的解决手头事件委托的问题是正确的方法。

于 2013-05-27T17:19:23.170 回答