2012-01-25 58 views
0

所有, 我有一些鏈接,得到顯示,如果一個人喜歡它的人可以點擊該鏈接後,無法正常工作,然後我基本上這樣它刪除鏈接它分配給另一個DIV可以刪除。下面是.POSTjQuery的.append功能

jQuery.post("save_song.php", { song_id: song_id, love_like_hate: "love" }, 
     function(response) { 
     if(response.responseText1=="too_many"){ 
       alert(response.responseText2); 
      }else if(response.responseText1=="already_selected"){ 
       alert(response.responseText2); 
      }else{ 
       alert(response.responseText2); 
       jQuery("#div_song_id_"+song_id).html(response.responseText1); 
       jQuery("#love_it").append(response.responseText2); 
       jQuery("#current_count_love").html(response.responseText3); 
       if(response.responseText4=="remove_initial"){ 
        jQuery("#love_none").hide(); 
       } 
      } 
    }, "json"); 

這裏的代碼發送回頁面save_song.php頁:

echo json_encode(array(
      'responseText1' => 'Youve added '.$artist_name.' - '.$track_name.' to your '.$love_like_hate.' list!', 
      'responseText2' => '<div id="div_added_song_id_'.$song_id.'" style="padding:0 0 0 10px; "><span style="display:inline-block; width:200px;">'.$artist_name.'</span><span style="display:inline-block; width:400px;">'.$track_name.'</span><span style="display:inline-block; width:100px;">'.$track_time.'</span><span style="display:inline-block; width:100px;"><a href="#" class="remove_song" id="delete_'.$song_id.'">Remove</a></span></div>', 
      'responseText3' => $resultrowschecktotal 
     )); 

我的問題是,當response.responseText2追加到我的DIV jquery的.remove_song不起作用,它基本上只是使用鏈接,並試圖做#。下面是remove_song代碼:

jQuery(".remove_song").click(function(){ 
    event.preventDefault(); 
    song_id = jQuery(this).attr("id"); 
    song_id = song_id.split("_"); 
    song_id = song_id[1]; 
    var answer = confirm("Do you want to remove this song?") 
    if (answer){ 
     jQuery.post("delete_song.php", { song_id: song_id }, 
      function(response) { 
       jQuery("#div_added_song_id_"+song_id).hide(); 
       jQuery("#current_count_"+response.responseText2).html(response.responseText1); 
      }, "json"); 
    } 
}); 

如何我還可以利用這個爲新追加的鏈接,因爲當DOM完成他們不是裝的?

回答

2

你最新的定位元素犯規綁定任何東西,所以當點擊不會做任何事情,儘量jQuery的生活 這樣的:

jQuery(".remove_song").live('click', function(){ 
    event.preventDefault(); 
    song_id = jQuery(this).attr("id"); 
    song_id = song_id.split("_"); 
    song_id = song_id[1]; 
    var answer = confirm("Do you want to remove this song?") 
    if (answer){ 
     jQuery.post("delete_song.php", { song_id: song_id }, 
     function(response) { 
      jQuery("#div_added_song_id_"+song_id).hide(); 
      jQuery("#current_count_"+response.responseText2).html(response.responseText1); 
     }, "json"); 
    } 
}); 

jQuery的1.7+使用

jQuery(document).on('click','.remove_song',function(){ 
    event.preventDefault(); 
    song_id = jQuery(this).attr("id"); 
    song_id = song_id.split("_"); 
    song_id = song_id[1]; 
    var answer = confirm("Do you want to remove this song?") 
    if (answer){ 
     jQuery.post("delete_song.php", { song_id: song_id }, 
     function(response) { 
      jQuery("#div_added_song_id_"+song_id).hide(); 
      jQuery("#current_count_"+response.responseText2).html(response.responseText1); 
     }, "json"); 
    } 
}); 
+0

'.live'在V1.7 +被貶值。建議用戶'$(文件)。在(「點擊」,「.remove_song」,函數(){'。只是爲了幫助答案進一步。 – kwelch

+0

感謝注意到 –

0

您需要使用$ .live()或$ .delegate(),而不是僅僅點擊()。

jQuery('#love_it').delegate('.remove_song', 'click', function(){ 
    event.preventDefault(); 
    song_id = jQuery(this).attr("id"); 
    song_id = song_id.split("_"); 
    song_id = song_id[1]; 
    var answer = confirm("Do you want to remove this song?") 
    if (answer){ 
     jQuery.post("delete_song.php", { song_id: song_id }, 
      function(response) { 
       jQuery("#div_added_song_id_"+song_id).hide(); 
      jQuery("#current_count_"+response.responseText2).html(response.responseText1); 
     }, "json"); 
    } 
}); 
1

了jQuery的。點擊活動僅適用於元素,你把它分配給,所以如果你帶來動態的內容,你需要使用一個現場活動:http://api.jquery.com/on/ 您可以設置爲觀看「DOM區域」進行更改,並自動爲其分配點擊事件。

我注意到其他人張貼到使用.live功能,但是,這是一個過時的功能的jQuery 1.7。