0

尝试使用该.load函数加载文件时,该新加载的文件不受我正在加载的父文件中的 jQuery 的影响。不是<script src=''></script>在每个正在加载的页面中添加代码,有没有更好的方法让我的 javascript 文件在这些文件中工作?或者这是让 javascript 在新加载的文件中工作的唯一方法?

4

2 回答 2

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');
于 2012-11-01T16:06:03.360 回答
0

听起来您正试图让事件处理程序在页面加载后绑定到元素?例如,您可能在父文档中有一些类似的东西:

$('#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/

于 2012-11-01T16:04:50.853 回答