对于具有许多屏幕和导航的 ajax Web 应用程序,要为 div 或链接或按钮附加事件处理程序,我们可以编写如下代码:
//Using $.on inside Ajax success handler
$("#container").on("click", "#selector", function(event){
});
如果 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); }); } } });
优点:一个模块的所有事件处理程序都记录在一个地方。每个 ajax 成功处理程序都没有代码混乱。
缺点:我不确定是否有。
如果有任何建议,请告知。