Mic*_*aël 18 javascript ajax jquery
在请求之后,我的jQuery代码中的事件处理程序无法识别创建的新元素.
有没有办法重新加载文件来重新注册这些事件?
Stu*_*ser 22
我假设你的意思是你注册的元素已经被你的ajax请求的结果所取代的事件没有被解雇?
使用.live()(请参阅http://api.jquery.com/live/)针对与选择器匹配的元素(包括从ajax的结果创建的新DOM元素)注册事件,而不是选择器的结果事件处理程序是第一个,当它们被替换时将被销毁.
例如,替换
$('div.someClass').click(function(e){
//do stuff
});
Run Code Online (Sandbox Code Playgroud)
同
$('div.someClass').live('click', function(e){
//do stuff
});
Run Code Online (Sandbox Code Playgroud)
重要:
虽然我建议使用.live()它是为了清晰,因为它的语法类似.bind(),你应该.on()尽可能使用.有关重要信息,请参阅@ jbabey评论中的链接.
这个问题是关于在加载页面后创建的DOM元素上的绑定事件处理程序.例如,如果在请求ajax之后,您创建了一个新的<div>bloc并想要捕获onClick事件.
//This will work for element that are present at the page loading
$('div.someClass').click(function(e){
//do stuff
});
// This will work for dynamically created element but is deprecated since jquery 1.7
$('div.someClass').live('click', function(e){
//do stuff
});
// This will work for dynamically created element
$('body').on('click', 'div.someClass', function(e){
//do stuff
});
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到文档:http://api.jquery.com/on/
小智 5
该代码非常适合我..
$("head script").each(function(){
var oldScript = this.getAttribute("src");
$(this).remove();
var newScript;
newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = oldScript;
document.getElementsByTagName("head")[0].appendChild(newScript);
});
Run Code Online (Sandbox Code Playgroud)
它删除旧的脚本标签并使用相同的 src 创建一个新的脚本标签(重新加载它)。
Ton*_*nov -1
jQuery 无法识别是什么意思?
每次发出请求时,jQuery 都会遍历 DOM,因此它们应该是可见的。然而,附加事件不会。
什么是不完全可见的?
PS:重新加载 JavaScript 是可能的,但强烈建议不要这样做!