-1

当我调用 .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 不能按预期工作时,为什么 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){}));

这在加载前有效,在加载后无效

4

2 回答 2

0

jQuery 从插入到 DOM 的内容中删除所有脚本,并将它们放在 HEAD 中执行(然后,出于某种原因,之后将它们从 HEAD 中删除)。请放心,您交付的所有脚本都已插入并执行。

为了回答您的编辑,.live()巧妙地使用了事件冒泡,它将集合上指定事件的处理委托给document对象。

jQuery.live()在引入.delegate()(文档)时已弃用,因为后者允许您指定应委托给的容器,而不是始终使用document. 这是首选,因为它允许您限制此类委托事件的影响(更少的冒泡事件要处理,更短的链到处理程序的行程,更少的选择器匹配/过滤等)。

.delegate()在事件 API 的统一中,它本身现在已被.on()(docs)所取代。如果您将选择器作为第二个参数传递给.on()您,则告诉 jQuery 将参数 1 中命名的事件委托给与给定选择器匹配的元素。

因此,所有对 的调用.live()都应替换为对 . 的适当范围调用.on()

于 2012-05-21T16:43:25.417 回答
-1

您的 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>
于 2012-05-21T14:49:05.413 回答