2012-10-02 98 views
0

我從表中刪除行,然後在用戶對錶單進行一些編輯後重新插入它們;標記爲jquery插入的元素類未加載

class="view_dialog" 

對插入的行沒有「加載」。

原始行有這樣的佈局:

<tr> 
    <td>new one</td> 
    <td>B2B NFIB</td> 
    <td class="actions" id="actions"> 
     <a href="/dirs/edit/252" class="view_dialog">Edit</a> 
    </td> 
</tr> 

一旦用戶改變了一些事情,我刪除所有行(通常只是4 3),並使用jQuery來填充表(.records):

$('.records tbody tr:last').after('<tr><td>'+data.dirArray[$count].Dir.name+'</td><td>'+data.dirArray[$count].Dir.dir_description+'</td><td class="actions" id="actions"><a href="/dirs/edit/'+data.dirArray[$count].Dir.id+'" class="view_dialog" id="Edit'+data.dirArray[$count].Dir.id+'">Edit</a></td></tr>'); 

行創建了就好了,爲行生成的代碼是相同的原始(添加ID試圖用.addClass沒有運氣)

<tr> 
    <td>new one</td> 
    <td>B2B NFIB</td> 
    <td class="actions" id="actions"> 
     <a href="/dirs/edit/252" class="view_dialog" id="Edit252">Edit</a> 
    </td> 
</tr> 

爲什麼班級沒有「加載」。我正在使用這個類來觸發一些事件。

試圖

$("[id^=Edit]").addClass('view_dialog'); 

沒有結果。

Checked.live,但它必須與父母子女的控制。在這種情況下使用它是強制性的嗎?

你能幫忙嗎?

非常感謝!

+0

您確定該類未設置嗎?當您在Firebug或開發工具中查看DOM時,您會看到什麼?我認爲問題更可能是新元素沒有綁定事件,因爲您在添加行之前綁定了事件。 – Barmar

+0

您是否嘗試過使用.delegate()而不是.live()? .live()在jQuery 1.7中已被棄用。 http://api.jquery.com/delegate/ – supernova

+1

@supernova「從jQuery 1.7開始,.delegate()已被.on()方法取代」。 –

回答

0

您的點擊綁定僅適用於您創建DOM時的元素,而不適用於稍後添加的元素。要處理動態添加的元素,您需要使用以下代碼進行授權:

$(".records").on("click", ".view_dialog", function() { 
    alert('class clicked'); 
}); 
+0

大謝謝@Barmar!它確實有效。 我需要對另一個添加的元素做同樣的事情,比如說「[id^= deleteAd]」。我嘗試從同一個班級(.records)進行委派,但沒有工作。 不清楚爲什麼$(「。records」)。on(「click」,「.view_dialog」 works。given .records does not have any「click」event defined in first place。此外,爲了獲得它工作,我不得不重複我的.view_dialog點擊功能上的代碼。我當然可以忍受(嘆氣) 你有什麼建議爲「[id^= deleteAd]」(或「.deleteAd」 class)這也是在.records表上嗎? 非常感謝。 –

+0

回答你的第一個問題:它的工作原理是'.on'爲.records創建click事件處理程序;處理程序檢查click是否在.view_dialog元素,它是如何在處理程序後添加的元素的工作原理。我不知道爲什麼這些元素不適用於.deleteAd - 可能會發佈一個新的問題,並提供完整的詳細信息。 – Barmar

+0

再次感謝@Barmar;現在很清楚,效果很好。 –

-1

你有沒有包含在DOM就緒事件中的代碼

$(function() { 

    // You code 
    $("[id^=Edit]").addClass('view_dialog'); 

}); 

此外,當你添加類。它是在創建元素之前或創建它們以後。

如果您分配這個在創建元素之前,恐怕這對於新添加的元素不起作用。

您需要在每個新創建的元素上顯式添加類。

+0

他說行正在被添加。你可以在他的Javascript中看到這個類包含在內。 – Barmar

+0

我打電話給 $(「[id^= Edit]」)。addClass( 'view_dialog');創建 @Barmar, 後 右擊我有一個事件綁定到類view_dialog: $點擊(函數(){ 警報 ( '類點擊'); ( 「view_dialog」)。 $(「#view_dialog」)。load($(this).attr('href'),function(response,status,xhr){ etc ... } 我檢查過DOM後,行看起來很好,添加了id。看起來像addclass沒有被觸發。:-( –

+0

@supernova,我將如何使用.on或.live解決這個問題?謝謝!! –