jQuery更改按钮id时不使用';行不通

jQuery更改按钮id时不使用';行不通,jquery,Jquery,我正在编写一个程序,当用户登录时,登录按钮将更改为注销按钮。代码如下: $("#signin").button().click(function(){ $("#dialog-user").dialog("open"); }); $.post('php/in.php',function(data){ $("#signin").attr('id','out'); }); $("#out").button().click(function(){ alert("clicked ou

我正在编写一个程序,当用户登录时,登录按钮将更改为注销按钮。代码如下:

$("#signin").button().click(function(){
  $("#dialog-user").dialog("open");
});

$.post('php/in.php',function(data){
    $("#signin").attr('id','out');
});

$("#out").button().click(function(){
   alert("clicked out");
});
我在这两者之间输入了一些代码,但基本上,当用户成功登录时,#sign button的id将更改为#out。但是,当我单击id为#out的new按钮时,它不会显示我指定的警报(“clicked out”)。它仍然显示#对话框用户,就好像按钮id仍然是#登录


请帮助我解决此问题。

您需要使用事件委派,因为绑定单击事件(即页面加载时)时,
\out
不存在


您需要使用事件委派,因为在绑定单击事件(即页面加载)时,
#out
不存在


对于这种情况,您需要将事件委托给静态祖先。As事件**绑定到元素,而不是元素的属性

试试这个方法

$(document).on('click',"#out",function(){
   alert("clicked out");
});

$(signin static ancestor).on('click',function(e) {
      if(e.target.id === 'signin') {
          $("#dialog-user").dialog("open");  
      }
      else if(e.target.id === 'out') {
           alert("clicked out");
      }
});

对于这种情况,您需要将事件委托给静态祖先。As事件**绑定到元素,而不是元素的属性

试试这个方法

$(document).on('click',"#out",function(){
   alert("clicked out");
});

$(signin static ancestor).on('click',function(e) {
      if(e.target.id === 'signin') {
          $("#dialog-user").dialog("open");  
      }
      else if(e.target.id === 'out') {
           alert("clicked out");
      }
});
在您的示例中,id在事件绑定后更改,不提供任何可将事件绑定到的内容。在post函数中单击out按钮可以确保当我们从服务器获取数据时,我们会更改id,然后分配事件


在您的示例中,id在事件绑定后更改,不提供任何可将事件绑定到的内容。在post函数中单击out按钮可以确保当我们从服务器获取数据时,我们会更改id,然后分配事件

.post()
是异步的。当你不再是初学者时,你打算做什么?@watson到时候我会看到:p我还有很多东西要学
。post()
是异步的。当你不再是初学者时,你打算做什么?@watson到时候我会看到:p我还有很多东西要学