jQuery在.append函数之后无法正常工作

时间:2012-01-25 02:40:49

标签: php jquery ajax json dom

全部, 我有一些链接显示,有人可以点击链接,如果一个人喜欢它,然后我基本上将它分配给另一个div与删除链接,以便它可以被删除。这是.post的代码

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时,.remove_song的jquery不起作用,它基本上只使用链接并尝试执行#。这是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 个答案:

答案 0 :(得分:1)

jquery .click事件仅适用于您指定的元素,因此,如果您动态引入内容,则需要使用直播事件:http://api.jquery.com/on/ 您可以将其设置为观看更改的“DOM区域”,并自动为其分配点击事件。

我注意到其他人发布了使用.live函数,但是,从jQuery 1.7开始它是一个不推荐使用的函数。

答案 1 :(得分: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");
    }
});