我在考虑表现
.click() VS .live("click")
这让我想知道.live是如何运作的.
它是否监视DOM更改以及何时检测到DOM中的更改它只是附加事件然后,它是否使用某种计时器(我不这么认为,但如果这样做非常重要,计时器会让我感到难过人)
对于具有许多屏幕和导航的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成功处理程序都没有代码混乱.
缺点:我不确定是否有.
如有任何建议,请告知.
我提到在jQuery中创建一个div元素并使用javascript 创建一个div元素.但是,当我动态添加按钮元素时,单击不起作用.我们需要做些什么改变才能使按钮点击工作?
注意:由于绑定到嵌套在Dom中的多个视图模型中提到的kendo控制要求,我们无法将该函数移动到document.ready之外
更新的参考文献
码
<head>
<title>Test</title>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://cdn.kendostatic.com/2013.2.716/js/kendo.all.min.js"></script>
<script type="text/javascript">
//lijo
$(document).ready(function ()
{
$(".statiscDIV").append('<div>FIRST</div>');
$(".statiscDIV").append('<div>hello <button class="MakeHoldDetailLinkButton" onclick = "showMakeAndHold();">View</button> </div>');
//lijo
function showMakeAndHold()
{
alert("HIIIIIII");
}
});
</script>
</head>
<body>
<div class="statiscDIV">
A
</div>
</body>
Run Code Online (Sandbox Code Playgroud)