繁体   English   中英

用Javascript绑定事件,更改元素的ID

[英]Binding events with Javascript, changing id of elements

我有以下代码:

$("#container").on("click","#button1",action1);

$("#container").on("click","#button2",action2);

function action1(){
    // do something
    // change button1 id to button2
    $("#button1").prop("id","button2");
}

function action2(){
    // do something
}

因此,当我单击button1时,action1会将button1更改为button2。

但是问题在于更改ID后,正在执行事件action2(仅在单击#button2时才必须执行)

但是问题在于更改ID后,正在执行事件action2(仅在单击#button2时才必须执行)

原因是您尚未将处理程序挂钩到button元素,而是将其挂钩到了容器 ,然后告诉jQuery 当事件发生时 ,它应该检查事件是否通过了与冒泡过程中的#button1选择器。 当您将button1的id更改为button2 ,它不再匹配-但它确实与另一个处理程序匹配,因此另一个处理程序被调用。 调度的这种动态特性使事件委托变得如此有用。

您可以通过以下方式“修复”此问题

  1. 不更改id ,这是不寻常的事情。

  2. 直接挂钩处理程序而不是使用事件委托。 当然,如果您有使用委派的理由,那么这不是一个好选择。 :-)

  3. 使用别的东西,比如一类,以确定委派的按钮on的呼叫。

但是请注意id必须唯一。 因此,如果要更改button1id ,则不能将其更改为button2id已在使用中。 在下面的示例中,我改用了newbutton1

#2的示例(以防您真的不需要委派):

 $("#button1").on("click",action1); $("#button2").on("click",action2); function action1(){ // do something alert("action1, the id of the button is: " + this.id); // change button1 id to newbutton1 $("#button1").prop("id","newbutton1"); } function action2(){ // do something alert("action2, the id of the button is: " + this.id); } 
 <div id="container"> <input type="button" id="button1" value="button1"> <input type="button" id="button2" value="button2"> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 

#3的示例:

 $("#container").on("click", ".first-button", action1); $("#container").on("click", ".second-button", action2); function action1(){ // do something alert("action1, the id of the button is: " + this.id); // change button1 id to newbutton1 $("#button1").prop("id","newbutton1"); } function action2(){ // do something alert("action2, the id of the button is: " + this.id); } 
 <div id="container"> <input type="button" id="button1" class="first-button" value="button1"> <input type="button" id="button2" class="second-button" value="button2"> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM