jQuery - 使用选择器范围作为函数参数来绑定事件

发布于 2024-11-03 22:41:22 字数 488 浏览 2 评论 0原文

我正在将一些点击事件应用于网格中的所有锚点。

我有一些 ajax 可以更新网格中的一行。

我不想再次将事件应用于整个网格,而是希望只应用于 ajax 更新的行,因此我将范围传递给绑定函数:

function bindEvents(scope)
{
 scope.find("a").click(function() { //do something });
}

function gridLoad()
{
 ..
 bindEvents($);
}

function ajax()
{
 ..
 bindEvents($(tr));
}

我收到错误,抱怨对象不支持单击事件。

当代码也很简单时,这确实有效

$("a").click(function() { //do something });

,在查找后添加 .each 没有效果。

有这方面的最佳实践吗?

I am applying some click events to all anchors in a grid.

I have some ajax which updates a row in the grid.

Rather than applying the events to the whole grid again, i wish to just apply to the ajax-updated row, so I pass in the scope to the bind function:

function bindEvents(scope)
{
 scope.find("a").click(function() { //do something });
}

function gridLoad()
{
 ..
 bindEvents($);
}

function ajax()
{
 ..
 bindEvents($(tr));
}

I am getting errors complaining about object doesnt support click event.

This was deffo working when the code was simply

$("a").click(function() { //do something });

also, adding a .each after the find has had no effect.

Is there best practice for this?

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

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

发布评论

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

评论(1

木落 2024-11-10 22:41:22

使用 .live().delegate() 并且您不需要重新绑定处理程序。它也比为每个 绑定一个处理程序更有效,因为 DOM 树上只有一个事件侦听器。

实时:将处理程序附加到当前和将来与当前选择器匹配的所有元素的事件。

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

只需一次,在文档准备好后,如下所示:

$('#grid-id a').live('click', function ()
{
    // do something
});

Use .live() or .delegate() and you won't need to rebind the handler. It's more efficient than binding a handler for every <a> as well, since there's just a single event listener higher up the DOM tree.

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.

Just once, on document ready, like this:

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