Jquery .load 删除<script>了 ...</script> 内容



当我调用 .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(( 函数后处理绑定问题,那么我建议执行以下操作:

将所有 click((, on('click'

( 事件替换为一个名为 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>

相关内容

  • 没有找到相关文章

最新更新