2013-06-19 52 views
0

我寫一個程序,其中的登入按鈕將被改變,當用戶登錄到退出按鈕的代碼如下:jQuery的改變按鈕ID不起作用

$("#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"); 
}); 

我已經obmitted一些代碼之間,但基本上,當用戶成功登錄時,#signin按鈕的ID將更改爲#out。但是,當我點擊帶#號的新按鈕時,它不會顯示我指定的警報(「已單擊」)。它仍然顯示#dialog-user,就好像按鈕ID仍然是#signin。

請幫我解決這個問題。

+0

'.post()'是異步的。 – j08691

+1

當你不再是初學者時,你會怎麼做? – dezman

+0

@watson我會看到什麼時候來的:P我還有很多東西要學 –

回答

3

您需要使用事件代表團正如,當你在頁面加載即結合的Click事件

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

非常感謝你 –

+0

@beginner乾杯! –

1

對於這樣的情況#out不存在,您會需要將事件委託給靜態祖先。由於事件綁定到元素而不是元素的屬性。

試試這個辦法..

$(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"); 
     } 
}); 
0
$("#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"); 
    }); 
}); 

在您的例子事件被追平後的ID發生了變化,從而沒有扳平事件。在post函數中點擊out按鈕可以確保當我們從服務器獲取數據時,我們改變id然後分配事件。

+0

這應該工作,但你應該解釋你做了什麼。 – j08691