点击事件不适用于动态ID

时间:2013-05-27 03:29:05

标签: javascript dynamic html-table click

我正在创建一个动态表,并希望通过单击具有动态创建的id的<a>元素来显示表单。我能够显示表单的唯一方法是将click事件中的选择器设置为表id(#table 2),但我不明白为什么我不能更具体地执行它。

$.each(json, function (index, value) {
    var posttimestamp = value.Post_timestamp;
    var replytimestamp = value.Reply_timestamp;
    var topic = value.Topic;
    var post_txt = value.Post_txt;
    var reply_txt = value.Reply_txt;
    var species = value.Species;
    var postuser = value.Post_User;
    var replyuser = value.Reply_User;
    var medcond = value.MedCondPrimary;
    var breed = value.Breed;

    if (value.Post_timestamp != check) {
        var newpost = 'y';
    } else {
        var oldpost = 'y';
    }


    if (newpost) {
        $('#table2').append('<tr><td   id="posttopic" colspan="2"><a href="forum24.php"           id=' + posttimestamp + '>' + topic + '</a></td><td></td></tr><tr><td id=' + "post" + posttimestamp + '>' + posttimestamp + '</td><td  id=' + "post" + posttimestamp + 'colspan="3">' + post_txt + '</td><td>' + postuser + '</td><td>' + breed + '</td></tr>');
    }

    $('#' + posttimestamp).click(function (e) {
        e.preventDefault();
        $('div.form').show();
    }

2 个答案:

答案 0 :(得分:0)

尝试更改

$('#' + posttimestamp).click(function(e) {...})

$('#' + posttimestamp).live("click", function(e) {...})

您可能遇到过jQuery尝试将click事件绑定到尚未存在于DOM中的.append() ed表单元格的情况。使用.live()会将click事件绑定到现在或将来存在的元素。

使用表ID作为选择器的原因是,当您调用.click()时,该表肯定已存在于DOM中。

答案 1 :(得分:0)

尝试jQuery.live()

 $('#' + posttimestamp).live("click", function (e) {
     e.preventDefault();
     $('div.form').show();
 }