1

由于不推荐使用 .live(),我开始使用 .on()。

我有以下代码:

$('.myClass').on("click", function(event)
{
    var args = '......';

     SendAjax(args);
});

SendAjax 函数执行以下操作:

SendAjax(args)
{
    $.ajax(
    {
        type: "POST",
        url: webPageName,
        data: queryParams+'&'+unique,
        success: function(result)
        {
            MyReturnFunction(result);
        }
    });
}

ajax 会返回这个函数:

MyReturnFunction(response)
{
      $('.myClass').html(response);
}

但是在这个 MyReturnFunction() 之后,.myClass 上的事件不再起作用。如何使用 .on() 或 .bind() 解决此问题?

4

1 回答 1

2

.on()函数可以接受一个额外的参数:

$('body').on('click', '.myClass', function() { ... });

这就是.live()为您所做的,但它是一种向后的 API 设计。现在您必须决定将委托处理程序放在哪里。body 元素是一个很好的默认值,但它可以是任何父元素。有时,当您处理对表格中事物的点击时,最好在<table>元素上进行绑定(尽管主体也可以正常工作)。

所以基本上规则是当你以前写的时候:

$('something').live('event-name', function() { ... })

你写:

$('container-selector').on('event-name', 'something', function() { ... })

“container-selector”表示您希望真正的事件处理程序放置在哪里——检查冒泡事件的目标是否与给定的“something”选择器匹配。和以前一样,您可以传递事件名称列表(以空格分隔),而不仅仅是一个。还有一个变体可让您将对象映射事件名称传递给函数。

于 2013-01-21T06:04:39.517 回答