jQuery脚本文件加载两次

dpl*_*net 9 ajax jquery

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

$('#body_container').load(a_href);
Run Code Online (Sandbox Code Playgroud)

a_href源文件的位置在哪里.运行并#body_container更新此命令后,div的新内容似乎无法访问原始页面标题中包含的脚本文件,即使它包含在此原始页面中.它只适用<script type="text/javascript" src="files.js"></script>于我放在a_href文件的开头.

然而,我实际上里面有很少的div #body_container,我也在改变,所以这样做,我已经files.js被包含在不同级别的很多次.这似乎导致了冲突.

有没有办法files.js在文档标题中包含一次,然后拥有所有div,无论何时创建内容,始终认识到该文件在那里,等待使用?

SpY*_*3HH 6

在每个负载中包含相同的JS文件有点多.我的建议是head第一次将文件包含在主文件中.然后使用"委托"作为"动态"元素.

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

$("a.bob").click(function(e) { e.preventDefault(); alert($(this).prop("href")); });
Run Code Online (Sandbox Code Playgroud)

我会用"代表团".jQuery为我们提供了一种简单的方法,可以将相同的事件|方法分配给具有匹配选择器的所有项目(现在和将来[动态]).这样做的方法如下:

$(document).on("click", "a.bob", function(e) {
    e.preventDefault();
    alert($(this).prop("href"));
});
Run Code Online (Sandbox Code Playgroud)

前一个将告诉所有a类别的标签bob不要去任何地方,并提醒我他们的链接.这与a标记添加到DOM的时间无关.

要记住的一件事.on是,jQuery版本1.72(我认为)是新的.在此之前你会使用.live甚至.delegate改为.


在旁注

当然,代表团只会参与"事件".如果您需要使用JavaScript进行类似"布局"移动的操作,那么您最好制作一个"回调"函数,以便在ajax请求成功时使用.同样,您可以将这些回调方法放在单头文件中,但是您需要在$ .ajax [success或complete]中根据需要"调用"它们.

successcomplete http://api.jquery.com/jQuery.ajax/更多地了解Ajax调用的基本回调.此外,从版本1.7开始,您可以根据需要维护要触发的列表或jQuery对象callbacks.要获取有关回调列表的更多信息,请参阅http://api.jquery.com/category/callbacks-object/

如果这还不够,请发表评论,我会尝试更清楚地提出任何问题.


Mic*_*ary 1

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

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

$("#body_container").on( 'click', '#my-div', function() {...});
Run Code Online (Sandbox Code Playgroud)

或者:

$("#body_container").delegate( '#my-div', 'click', function() {...});
Run Code Online (Sandbox Code Playgroud)

#my-div动态内容中的某个元素在哪里。

现在,即使您在首次加载页面时只加载脚本一次,事件处理程序也将起作用。

  • 此时您需要做的是用 JavaScript 开发人员能够理解的非常具体的术语描述问题,并给出一个工作(非工作)示例,我们可以在其中看到问题的实际情况。您发布的小提琴并没有真正的帮助;不可能在那里重复这个问题,不是吗?像“最高级别的脚本文件在加载时子级无法访问”这样的术语是没有意义的。我已经这样做很多年了,但我不知道这意味着什么。这就是为什么我疯狂猜测问题可能出在哪里。 (3认同)
  • 继续我之前的评论...通常我们不会考虑子元素“访问脚本文件”。恰恰相反。我们编写访问 DOM 元素的脚本文件。这就是为什么我和其他响应者只是进行疯狂的猜测;我们不知道您要解决的实际具体问题是什么。 (2认同)