Jquery无法处理加载的内容
它似乎有一个简单的解决方案,但我无法弄明白,有一千个类似的主题,但没有一个对我有用,所以我以一个非常简单的方式提出这个问题,
我有一个按钮,按下“A”按钮,我想在点击此按钮时加载外部页面的一部分,
加载该部分后,还有另一个按钮(“B”)(在加载的内容中)使用jQuery显示一些隐藏的内容,问题是第二个按钮不起作用。 我尝试使用.load(’content.html#1,script’)设置超时; &…
以下是代码: 主页:
Load
内容页面:
Content 111 Show... Content 222
脚本
$(document).ready(function() { $("#load").click(function() { $('#holder') .html(' Loading') .load('content.html #1'); }); $("#show").click(function() { $('#showhere') .html('here it is
') }); });
编辑:
感谢所有人的完美答案,对于这种情况,我认为最简单和最简单的将是使用.live但事情是这只是一个使事情变得不复杂的样本,在实际项目中我有一个复杂的jquery要在加载内容,它不仅仅是添加一个.html元素,所以基本上,我要求一个解决方案,使java脚本在加载的内容上工作,也许在内容加载后进行某种重置或重新加载?
EDIT2:
好吧,我还没有找到解决方案,所以我决定更改我的代码,我正在添加.live到所有function,但还有另一个问题,我明白,对于事件,我必须使用像
$("#show").live("click",function() {
代替
$("#show").click(function() {
但是还有很多东西不在函数中,比如:
var $itval = $("#holder li").length; $(".filters li input[value*='all']").parent().find('span').html($itval); $("#holder li, .played").show(); $(".entry-made").hide();
有没有办法包装一个不影响整个jquery东西的函数?
使用.on()的委托版本将事件处理程序“扩展”为动态加载的内容
$("#holder").on("click", "#show", function() { $('#showhere').html('here it is
') }); });
使用.on
方法将事件绑定到动态添加的元素。
$("#show").on("click","#show",function() { $('#showhere').html('here it is
') });
您也可以在这种情况下使用实时绑定。 将您当前的“#show onclick”替换为此版本。
$("#show").live("click",function() { $('#showhere').html('here it is
') });
原因是,当您尝试连接处理程序时,该元素不存在 ,因此没有任何东西被连接起来。
你也可以
-
一旦元素实际存在,就使用
load
callback并直接挂钩,或者 -
使用事件委托
1. load
回调
如果要连接到已加载内容中的特定元素,请使用load
回调:
$("#load").click(function() { $('#holder') .html(' Loading') .load('content.html #1', function() { // <== This is the callback $("#show").click(function() { $('#showhere') .html('here it is
') }); }); });
2.活动授权
现在,如果您要加载和卸载要响应事件的大量内容,可以考虑使用事件委派 。 这就是你在容器上挂钩事件的地方,但是告诉jQuery只有当它实际上是在容器的匹配后代上启动时才让你知道它发生了。
在您的情况下,您的#holder
作为容器是有意义的:
$("#load").click(function() { $('#holder') .html(' Loading') .load('content.html #1') .delegate("#show", "click", function() { $('#showhere') .html('here it is
') }); });
在那里我使用delegate
来设置委托事件处理程序。 你也可以使用荒谬的重载(注意参数的顺序是不同的):
.on("click", "#show", function() {
…但我更倾向于明确使用直接处理程序和delegate
委托代理。
你在下面的评论中说过
…问题是我在加载的内容中有很多function,有没有什么方法可以让你的工作没有重新编码?
我猜你所说的“加载内容中的函数”是指你在content.html
中使用JavaScript来处理其中的元素,并且你想在这个文件中重用相同的脚本。
你这样做的方法是将该脚本放在自己的JavaScript文件中,并让content.html
和主页引用该文件。 让脚本在加载时不执行 ,但定义函数(如contentPageHookUpNiftyEvents
)。
content.html
可以在加载后立即调用该函数(如果您将script
标记放在文件的底部,则应该直接调用,或者如果您有理由不这样做,则可以直接调用)。
您的主页面将从上面#1中提到的load
回调调用contentPageHookUpNiftyEvents
。