尝试使用.load
函数加载文件时,新加载的文件不会受到加载到其中的父文件中的jQuery的影响。而不是在每个正在加载的页面中添加<script src=''></script>
代码,是否有更好的方法让我的javascript文件在这些文件中工作?或者这是让javascript在新加载的文件中工作的唯一方法吗?
答案 0 :(得分:2)
这完全取决于脚本的设置方式。没有脚本意味着没有确切的解决方案。
.load()
方法在当前脚本运行时加载脚本。这意味着在加载文件时,您的脚本很可能已完成运行。
这就是为什么我们有回调。在完成另一个操作后运行回调。
$.load(url, function(responseText, textStatus, XMLHttpRequest) {
var paragraph = $('<p />').html(responseText);
// append new paragraph
$(document.body).append(paragraph);
});
// hide all paragraphs
$('p').css('display', 'none');
我可以想象你认为正在添加的段落会隐藏,因为我们会隐藏所有段落。
<强>错误强>
当您的段落添加到正文时,负责隐藏段落的行已经完成。所以,你必须在回调中再次执行操作:
$.load(url, function(responseText, textStatus, XMLHttpRequest) {
var paragraph = $('<p />').html(responseText);
// append new paragraph
$(document.body).append(paragraph);
// do it again
$('p').css('display', 'none');
});
// hide all paragraphs
$('p').css('display', 'none');
答案 1 :(得分:0)
听起来你正试图让事件处理程序在页面加载后绑定到元素?例如,您可能在父文档中有某些内容,例如:
$('#something').click(function(){ alert('You clicked me'); }
这些事件处理程序立即“绑定”,不会影响使用.load()时加载的元素。您必须做的是使用live()
活页夹或.on()
活页夹。 .on()
是首选,但开始时习惯可能有点奇怪。
解决问题的最快方法是从.click
,.change
e.c.t更改事件绑定。分别到.live('click', function(){} )
和.live('change', function(){})
。
或者使用on()
的正确方法,你应该这样做:
$(document).on('click', '#element', function(){ alert('you clicked me'); });
运行on
方法的元素应该是一个父容器,它不是通过.load
加载的,其中绑定的所有元素都位于其中。 document
已经足够并且可行,但在性能方面并不是最好的
如果您发布代码,我们可以提供更加量身定制的答案。我已经尽力详细解释它,但我可能已经过度复杂了。所以如果你有任何问题,那就问问。
jQuery.on():http://api.jquery.com/on/
jQuery.live():http://api.jquery.com/live/