当我调用.load函数时,它会给我带来HTML代码,但它会清除<script>
内容,来自cards.tpl.php的代码:
<script type="text/javascript">
//anything
</script>
<div style="float:right" class="blah">
<!-- anything -->
</div>
来自index.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('click')替换所有click(),on('click')事件和一个名为livequery的插件,它100%工作。
没有考虑到一个新问题,但为什么JQuery会告诉你用on()替换live()什么时候它不会按预期工作?
编辑JAAulde
<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){}));
这在加载之前有效,在
之后不起作用答案 0 :(得分:0)
jQuery从插入到DOM中的内容中删除所有脚本,并将它们放在HEAD中执行(然后,由于某种原因,之后将它们从HEAD中删除)。请放心,您发送的所有脚本都已插入并执行。
要回答您的编辑,.live()
巧妙地使用了事件冒泡,它将对集合上指定事件的处理委托给document
对象。
jQuery在引入.live()
(docs)时已弃用.delegate()
,因为后者允许您指定要委派的容器,而不是始终使用document
。这是首选,因为它允许您限制此类委托事件的影响(较少的泡沫事件处理,链条到处理程序的较短行程,较少的选择器匹配/过滤等)。
.delegate()
本身已被.on()
(docs)取代。如果将选择器作为第二个参数传递给.on()
,则告诉jQuery将参数1中指定的事件委托给与给定选择器匹配的元素。
因此,对.live()
的所有调用都应替换为.on()
的适当范围调用。
答案 1 :(得分:-1)
你缺少来自card.tpl的$(文件).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>