任何人都可以用JavaScript解释事件委托,它有什么用?
对于具有许多屏幕和导航的ajax Web应用程序,要附加div或链接或按钮的事件处理程序,我们可以编写如下代码:
//Using $.on inside Ajax success handler
$("#container").on("click", "#selector", function(event){
});
Run Code Online (Sandbox Code Playgroud)
如果DOM中不存在容器,则此方法将不起作用.为了使其工作,将不得不使用文件或身体作为容器,性能可能不太好.
Ajax成功处理程序中可能有许多代码行.为了更好地组织,可以将代码移动到一个函数并在Ajax成功处理程序中调用该函数.但是我们必须为所有排列和组合制作许多寄存器事件函数.
注册函数代码混乱.
如果已经注册了事件处理程序,则再次注册将导致两个偶数处理程序.所以我们必须取消注册和注册(只有在没有附加时才附加) - 不确定性能问题.
任何替代品?
我想的是:
在ajaxComplete全局事件处理程序中,如果xhr.responseHTML具有容器,则将事件处理程序附加到目标元素(仅在未附加时附加).
$(document).ajaxComplete(function(e, xhr, settings){
for(ind in clickEventListeners){eventlistner = clickEventListeners[ind];
if($(eventlistner.container,xhr.responseHTML).length > 0){
$(eventlistner.target).on("click",function(){
eventlistner.processor(this);
});
}
}
});
Run Code Online (Sandbox Code Playgroud)优点:所有事件处理程序都记录在一个模块的位置.每个ajax成功处理程序都没有代码混乱.
缺点:我不确定是否有.
如有任何建议,请告知.
请让我知道以下内容之间的区别。
我对这种行动是陌生的。
$('#myButton').on('click', function () {
// Some code
});
Run Code Online (Sandbox Code Playgroud)
和
$(document).on('keyup', '#myButton', function () {
// Some Code
});
Run Code Online (Sandbox Code Playgroud)
和
$('#myButton').click(function () {
//Some code
});
Run Code Online (Sandbox Code Playgroud)