无法检测到已更改的ID

时间:2013-05-27 17:13:27

标签: javascript jquery

当我更改按钮的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。

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

3 个答案:

答案 0 :(得分:5)

更改

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

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

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

jsFiddle

{{3}}

答案 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提出的事件委托是正确的方法。