点击功能不起作用

发布于 2024-11-16 11:14:10 字数 460 浏览 0 评论 0原文

我有一个表,我可以使用这样的克隆函数添加行:

new_row = $(table_id+' tbody > tr:last').clone(true).removeAttr('id').insertAfter(table_id+' tbody > tr:last');

每行都有特殊的单元格,其内容手动创建如下:

$(new_row).children('.action_2').html('<a class="row_delete"><img src="/images/pack/cross.png" alt="Cancel" /> Cancel</a>');

问题是函数 $('.row_delete').click(function(){。 ..}) 不适用于此动态添加的行,出了什么问题?

I have a table where i can add rows using clone function like this:

new_row = $(table_id+' tbody > tr:last').clone(true).removeAttr('id').insertAfter(table_id+' tbody > tr:last');

each row have special cell which content creates manualy like this:

$(new_row).children('.action_2').html('<a class="row_delete"><img src="/images/pack/cross.png" alt="Cancel" /> Cancel</a>');

The problem is that function $('.row_delete').click(function(){...}) is not working with this dynamically added rows, what's wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

神妖 2024-11-23 11:14:10

stuff/}); )(要删除处理程序,请使用 .die() )

您需要使用 .live 函数 ( .live('click', function(e){ / 这就是绑定,将单击处理程序添加到指定的每个元素(在示例中使用 .row_delete 类),并且稍后添加的元素不受影响。

Live(),将处理程序绑定得更高,然后检查注册的单击是否发生在指定元素之一中。

请记住,如果元素上有另一个指定的处理程序,这会阻止事件的传播(或 IE 语言中的冒泡),则不会调用 live() 的回调。

You need to use the .live function ( .live('click', function(e){/stuff/}); ) (and to remove the handler, use .die() )

Reason for this is that bind, adds a click handler to every element specified (with the .row_delete class in your example), and the elements that are added later, are unnafected.

Live(), binds the handler much higher, and then checks if the registered click happened in one of the specified elements.

Keep in mind that if there is another specified handler on the element, that prevents propagation of the event (or bubbling in IE language) then live()'s callback won't be called.

小…楫夜泊 2024-11-23 11:14:10

单击功能在页面加载时应用于具有该类的行。

您必须使用 live() 方法才能使其正常工作:

http://api.jquery.com/live/

通过 live,您可以使在页面的整个生命周期内与给定模式匹配的所有元素都具有相同的行为。

$('.row_delete').live('click',function(){...})

应该可以做到这一点。

The click function is being applied to the rows with that class at the page load.

You have to use the live() method to get that working:

http://api.jquery.com/live/

With live you can make that all the elements that match a given pattern during the entire life of the page have the same behavior.

$('.row_delete').live('click',function(){...})

That should do it.

捶死心动 2024-11-23 11:14:10

例如,使用 jQuery live 方法来分配事件,

$('tr').live('click', function() {
  ///your code here
});

因此当您在该位置添加时,新的 tr 事件将附加到它。

use jQuery live method to assign events, for example

$('tr').live('click', function() {
  ///your code here
});

so when ever you add at that place new tr event will be attached to it.

忘你却要生生世世 2024-11-23 11:14:10

使用 .live().delegate() 而不是 .click(...)

.live():

为现在和将来匹配当前选择器的所有元素的事件附加一个处理程序。

.delegate():

根据一组特定的根元素,将处理程序附加到现在或将来与选择器匹配的所有元素的一个或多个事件。

事件绑定代码将如下所示

$('.row_delete').live('click', function(){...});
// or
$('#my_table_id').delegate('.row_delete', 'click', function(){...});

Use .live() or .delegate() instead of .click(...).

.live():

Attach a handler to the event for all elements which match the current selector, now and in the future.

.delegate():

Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.

The event binding code would then look like

$('.row_delete').live('click', function(){...});
// or
$('#my_table_id').delegate('.row_delete', 'click', function(){...});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文