2012-10-02 100 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解决这个问题?谢谢!! –