2012-05-20 109 views
0

剛剛嘗試了以下方法,發現這不起作用?javascript:使用ajax更改onClick屬性不會觸發新事件?

(使用jQuery):

function bookmark_add() { 

     $.ajax({ 
      type: "POST", 
      url: "load.php", 
      data: data, 
      success: function(msg) { 
       var msg_array=msg.split("-"); 
       var success=msg_array[0]; 
       var bookmark_id=msg_array[1]; 

       if(success==1) { 
        $('.btn_bookmark').html('Remove Bookmark'); 
        $('.a_bookmark').attr("onClick","bookmark_remove("+bookmark_id+"), return false;"); 
        } 
       } 
     }); 
    } 

此功能工作正常。 <a>元素的屬性被正確更改。然而,新的事件(功能bookmark_remove沒有被解僱,所以我認爲我的方法不起作用,因爲一些基本的誤解,可能?

有誰能告訴我,這個假設是正確的,給任何暗示爲什麼?

回答

5

我不能馬上告訴你爲什麼它不工作(可能是幾件事情; onClick應該是全部小寫的一件事  —的大小寫混合的版本僅在HTML好嗎標記 [不是XHTML,但HTML],而不是一旦你與DOM交互,這是區分大小寫的),但沒有理由這樣做,而是:

$('.a_bookmark').click(function() { 
    bookmark_remove(bookmark_id); 
    return false; 
}); 

如果錨自帶裝備預先與現有onclick處理,你可以清除它是這樣的:

$('.a_bookmark').attr("onclick", ""); 

所以把它們一起:

$('.a_bookmark').attr("onclick", "").click(function() { 
    bookmark_remove(bookmark_id); 
    return false; 
}); 

顯然人不明白我在做什麼,所以這裏是你的完整ajax與上面建議的更改呼叫:

$.ajax({ 
     type: "POST", 
     url: "load.php", 
     data: data, 
     success: function(msg) { 
      var msg_array=msg.split("-"); 
      var success=msg_array[0]; 
      var bookmark_id=msg_array[1]; 

      if(success==1) { 
       $('.btn_bookmark').html('Remove Bookmark'); 
       $('.a_bookmark').attr("onclick", "").click(function() { 
        bookmark_remove(bookmark_id); 
        return false; 
       }); 
      } 
    }); 
+1

如果OP當前有一個'onclick'屬性綁定來添加一個書籤,你的監聽器和他的屬性都會觸發我猜。 –

+0

這是錯誤的,因爲bookmark_id值不存在於.click內容中 –

+0

@WampieDriessen:是的。我正在談論替換他在ajax處理程序中的代碼。點擊處理程序將是'bookmark_id'上的一個閉包。 –

2
"bookmark_remove("+bookmark_id+"), return false;" 

逗號是錯誤的。它應該是一個分號。

+1

如果OP想要使用逗號運算符,則需要''return bookmark_remove(「+ bookmark_id +」),false;「'不要過度使用逗號運算符。:-) –

+0

@ T.J.Crowder:是的,Wampie似乎是對的,因爲用分號而不是逗號作用... – Chris

+0

@Chris:是的。有很多事情你可以用逗號連接在一起,但是你不能把'return'放在那裏 - 它必須在一開始,這會非常容易混淆。 :-)但總體來說,通過jQuery使用DOM2處理程序比舊的DOM0更好...... –

1

,而不是因爲你是使用jQuery:

$('.a_bookmark').attr("onClick","bookmark_remove("+bookmark_id+"), return false;"); 

我建議你使用這種形式:

$('.a_bookmark').click(function(){ 
    bookmark_remove(bookmark_id); 
    return false; 
}) 

更具可讀性用更少的報價令牌,對不對?