jQuery .load问题。不受父javascript文件的影响

时间:2012-11-01 15:56:01

标签: javascript jquery

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

2 个答案:

答案 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/