2013-05-27 31 views
0

我正在創建一個動態表,並希望通過單擊具有動態創建標識的<a>元素來顯示錶單。我能夠顯示錶單的唯一方法是將click事件中的選擇器設置爲表ID(#表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(); 
    } 
+1

請問你的標記看?什麼是$('#'+ posttimestamp)'你可以發佈一個小提琴來複制這個問題嗎? – PSL

回答

0

嘗試改變這種

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

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

您可能情況jQuery是試圖將click事件綁定到.append() -ed表格單元格的情況下,這在DOM中不存在。使用.live()會將點擊事件綁定到現在或將來存在的元素。

使用表ID作爲選擇器的原因是,當您撥打.click()時,該表格肯定已存在於DOM中。

+0

謝謝,這工作。基於你的回答,我做了一些進一步的研究,並且看到從jQuery 1.7開始,.live()方法已被棄用。使用.on()附加事件處理程序。我也嘗試了.on方法,但那不起作用。奇怪,因爲語法看起來和.live差不多。 – user2232681

+0

獲得了.on方法。 – user2232681

0

嘗試jQuery.live()

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