尝试使用该.load
函数加载文件时,该新加载的文件不受我正在加载的父文件中的 jQuery 的影响。不是<script src=''></script>
在每个正在加载的页面中添加代码,有没有更好的方法让我的 javascript 文件在这些文件中工作?或者这是让 javascript 在新加载的文件中工作的唯一方法?
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');
听起来您正试图让事件处理程序在页面加载后绑定到元素?例如,您可能在父文档中有一些类似的东西:
$('#something').click(function(){ alert('You clicked me'); }
这些事件处理程序立即“绑定”,不会影响使用 .load() 加载的元素。您必须做的是使用live()
活页夹或.on()
活页夹。.on()
是首选,但开始习惯可能有点奇怪。
解决问题的最快方法是将事件绑定分别从.click
、等更改.change
为.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/