当我调用 .load 函数时,它给我带来了 HTML 代码,但它会清除<script>
内容,即 cards.tpl 中的代码.php:
<script type="text/javascript">
//anything
</script>
<div style="float:right" class="blah">
<!-- anything -->
</div>
索引中的代码.php:
<div id="cards">
<?php include 'tpl/cards.tpl.php'; ?>
</div>
...
<script type="text/javascript">
$('#drawCard').click(function(){
$('#cards').load("tpl/cards.tpl.php",function(){
});
});
</script>
当PHP包含内容时,它包括<script>
,但是当我单击 #drawCard 时,JavaScript只会给我带来div。我刚刚看到.load实际上删除了脚本标签,但它们被执行了,执行后绑定事件是否仍然存在?
编辑:
好的,我终于找到了解决这一切背后的问题的方法。使用 load(( 调用包含事件绑定代码的<script></script>
会让你头疼不已。别这样!。如果你真正的问题是在使用 $.load(( 函数后处理绑定问题,那么我建议执行以下操作:
( 事件替换为一个名为 livequery 的插件,使用 livequery('click'(,它 100% 工作。
不是反对一个新问题的心情,而是为什么 JQuery 告诉你用 on(( 替换 live(( 当它不能按预期工作时?
编辑
<div id="cards">
<!-- this content is replaced -->
<div value="t1" class="impar tecnologia unselected investigated notUsed">stuff</div>
</div>
<!-- end of content replaced-->
</div>
并使用此 jQuery 代码:
$("#cards").on('click','.unselected',(function(e){}));
这在加载之前有效,在加载后不起作用
jQuery从插入到DOM的内容中删除所有脚本,并将它们放在HEAD中执行(然后,由于某种原因,之后将它们从HEAD中删除(。请放心,您发送的所有脚本都已插入并执行。
为了回答您的编辑,.live()
巧妙地使用了事件冒泡,它将集合上指定事件的处理委托给document
对象。
jQuery在引入.delegate()
(docs(时.live()
弃用,因为后者允许您指定应委派到的容器,而不是始终使用document
。这是首选,因为它允许您限制此类委托事件的影响(需要处理的气泡事件更少,到处理程序的链行程更短,选择器匹配/筛选更少等(。
.delegate()
本身现已在事件 API 的统一中被 .on()
(文档(取代。如果将选择器作为第二个参数传递给.on()
则告诉 jQuery 将参数 1 中命名的事件委托给与给定选择器匹配的元素。
因此,对.live()
的所有调用都应替换为作用域正确的.on()
调用。
您的 card.tpl 包含中缺少 $(document(.ready(...(。
我回顾了你的历史,(在我要求你清理它之后:-p(你发布的原始代码,我发现了这个:
<script type="text/javascript">
$('#toggleMax').click(function(){
// code
});
// more code
</script>
然后我编写了类似的东西,它奏效了。我唯一改变的是将您的代码包装在 document.ready 中:
<script type="text/javascript">
$(function() { // Note the document.ready call here.
$('#toggleMax').click(function(){
// code
});
// more code
});
</script>