由于不推荐使用.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()修复此问题?
答案 0 :(得分:2)
.on()
函数可以采用额外的参数:
$('body').on('click', '.myClass', function() { ... });
这就是.live()
为你做的,但它是一个向后的API设计。现在您必须决定将委托处理程序放在何处。 body元素是一个很好的默认值,但它可以是任何父元素。有时当你处理表格中的事情点击时,最好在<table>
元素处进行绑定(虽然身体也可以正常工作)。
所以基本上规则就是你曾经写过:
$('something').live('event-name', function() { ... })
你写道:
$('container-selector').on('event-name', 'something', function() { ... })
“容器选择器”表示您希望放置真实事件处理程序的位置 - 检查泡沫事件的目标是否与给定的“某事”选择器匹配的处理程序。和以前一样,您可以传递事件名称列表(用空格分隔)而不是一个。还有一个变体允许您将对象映射事件名称传递给函数。