jQuery脚本文件加载两次

jQuery脚本文件加载两次,jquery,ajax,Jquery,Ajax,当我使用Ajax提交表单时,我希望重新加载已更改的页面部分,而不是整个页面,为此我使用: $('#body_container').load(a_href); 其中a_href是源文件的位置。运行此命令并更新#body_container后,div的新内容似乎无法访问原始页面标题中包含的脚本文件,即使它包含在此原始页面中。仅当我将放在a_href文件的开头时,它才起作用 然而,我实际上在#body_container中有一个小div,我也在更改它,所以这样做会在不同级别多次包含文件.js。这似

当我使用Ajax提交表单时,我希望重新加载已更改的页面部分,而不是整个页面,为此我使用:

$('#body_container').load(a_href);
其中
a_href
是源文件的位置。运行此命令并更新
#body_container
后,div的新内容似乎无法访问原始页面标题中包含的脚本文件,即使它包含在此原始页面中。仅当我将
放在
a_href
文件的开头时,它才起作用

然而,我实际上在
#body_container
中有一个小div,我也在更改它,所以这样做会在不同级别多次包含
文件.js
。这似乎引起了冲突


是否有一种方法可以在文档头中包含
文件.js
,然后让所有div(无论其内容是在什么时候创建的)始终识别该文件在那里,等待使用?

脚本中的事件处理程序在动态加载的内容中不起作用,这是实际问题吗

如果是这种情况,请将这些事件处理程序更改为使用事件委派。例如:

$("#body_container").on( 'click', '#my-div', function() {...});
或:

其中
#my div
是动态内容中的某个元素


现在,即使在第一次加载页面时只加载一次脚本,事件处理程序也会工作

如果我正确理解了这个问题,那么问题在于动态加载外部文件中的元素时,您没有初始化它们

您应该使用jQuery
.load()
方法的
complete
(回调)参数;当相应的请求完成时执行。这是你的电话号码

加载外部内容的主PHP/HTML文件:


$(文档).ready(函数(){
//这是要从外部调用的函数
//加载的内容。
函数functionToBeCalled(){
警报(“在主(加载程序)页面中调用函数!”);
}
//这是当AJAX请求发出时执行的处理程序方法
//已完成。您可以在外部
//这里是内容文件。
函数initOnLoad(responseText、textStatus、XMLHttpRequest){
//加载完成时附加事件侦听器:
$(“#外部div”)。在('单击',“#外部btn',函数被调用)上;
}
$(“.manage_link”)。单击(函数(e){
e、 预防默认值();
var a_href=$(this.attr('href');
//在此处将initOnLoad回调作为参数传递:
$('#ajax_manage').load(a_href,initOnLoad);
});
});
外部内容1(ajax_1.php):


外部内容1
调用函数(来自ajax 1)
外部内容2(ajax_2.php):


外部内容2
调用函数(来自ajax 2)
在每次加载中包含相同的JS文件有点过分。我的建议是第一次将该文件包含在主
标题中。然后对“动态”元素使用“委托”

例如,假设我正在加载一个局部视图,该视图将具有与最初加载的链接按钮类似的链接按钮。因此,我希望他们保持相同的点击功能。而不是典型的任务,例如:

$("a.bob").click(function(e) { e.preventDefault(); alert($(this).prop("href")); });
我将使用“授权”。jQuery为我们提供了一种简单的方法,可以将相同的事件|方法分配给所有具有匹配选择器的项(现在和将来的[DYNAMIC])。方法如下:

$(document).on("click", "a.bob", function(e) {
    e.preventDefault();
    alert($(this).prop("href"));
});
前面的命令将告诉所有具有类
bob
a
标记不要去任何地方,并提醒我它们的链接。这与将
标记添加到DOM的时间无关

需要记住的一点是,
上的
.on是jQuery 1.72版的新版本(我认为)。在此之前,您将使用
.live
甚至
.delegate


附带说明 当然,代表团只会处理“事件”。如果您需要使用JavaScript进行“布局”移动,那么最好创建一个“回调”函数,以便在ajax请求成功时使用。同样,您可以将这些回调方法放在一个head文件中,但是您需要根据需要在$.ajax[success或complete]中“调用”它们

请参见
success
complete
以了解有关ajax调用的基本回调的更多信息。另外,从1.7版开始,您可以维护
回调
的列表或jQuery对象,以便根据需要触发。要获取有关回调列表的详细信息,请参阅


如果这还不够,请发表评论,我会尽量让您有问题的地方更清楚。

在添加悬赏时,您至少应该让回答了问题的人提供更多信息。如果你的答案含糊不清,可能是因为你的问题一开始就含糊不清。你能举个真实的例子吗?也许是小提琴?嗨,奥努里尔德林。这里有一个小问题:因为我不能包含PHP,所以请假设每个文件都返回一个任意的和不相关的模板(也需要访问javascript(因此包含一个
来执行此操作)并用此更新
#manage
。如果我在manage 1和manage 2之间快速单击,问题就会出现,然后它似乎会在两者之间无限闪烁。您不需要在加载的文件中包含脚本。请查看我的答案。@dplanet这里的两个答案都是准确的,这仍然不是您想要的吗?正如我所读到的你的问题,我看不出有任何理由不适合你的需要。嗨,这在Hi工作
$(document).on("click", "a.bob", function(e) {
    e.preventDefault();
    alert($(this).prop("href"));
});