脚本里面jquery移动可折叠火两次

时间:2012-03-24 08:17:36

标签: jquery jquery-mobile

为什么脚本在jquery移动可折叠火灾两次,谢谢先进。

更新:代码显示当点击“btnonce”时只有1个提醒,但是“btntwice”2提醒,只有不同的是“btntwice”javascript下的“div data-role =”可折叠“,为什么要点火两次?

<div data-role="page" id="page">
   <div data-role="content"> 
<script type="text/javascript">
  $('#page').live('pageinit', function (event) {
    $("#btnonce").click(function() {
    alert("Handler for .click() called.");
    });
 })
</script>
<div data-role="collapsible" data-collapsed="false" id="one">
<script type="text/javascript">
   $('#page').live('pageinit', function (event) {
      $("#btntwice").click(function() {
      alert("Handler for .click() called.");
    });
   })
</script>
 <h3>Test</h3>
<input type="button" id="btntwice" data-icon="check" value="fire twice" ></input>
<input type="button" id="btnonce" data-icon="check" value="fire once" ></input>
</div>
</div>
</div>

http://jsfiddle.net/M8PM2/39/

2 个答案:

答案 0 :(得分:0)

将您的JavaScript更改为:

$('#page').live('pageinit', function (event) {
    $("#btnonce").click(function() {
        alert("Handler for .click() called.");
    });
    $("#btntwice").click(function() {
        alert("Handler for .click() called.");
    });
})

Working example here

您的click处理程序已添加两次 - see this example

答案 1 :(得分:0)

看起来jqm可折叠_create函数使用jQuery wrapInner()的方式存在问题。有一个已知的jQuery错误(或者它是一个功能?),domManip逻辑会重新执行要包装的内容中的脚本标记。好时光。

如果您可以将脚本移出可折叠部分,那将是理想的选择。您可能会破解jqm以不为该特定代码行使用wrapInner:

collapsibleContent = collapsible.wrapInner( "<div class='ui-collapsible-content'></div>" ).children( ".ui-collapsible-content" ),

就我个人而言,我将选择一所旧学校“if(yetRan)return; yetRan = true;” - type flag。让我对FORTRAN怀旧。

<强>更新

所以我最终在我的jqm安装脚本中使用以下内容(在每个页面和“子”页面上运行):

$(document).on({
    pagecreate: function (e) {
        $(':jqmData(role=collapsible) script').remove();
    }
}, ':jqmData(role=page)');

似乎无害。我总是可以在我的脚本中添加一个类并修改选择器,如果由于某种原因我执行想要两次运行内联脚本。类似的东西:

$(':jqmData(role=collapsible) script:not(.do-not-remove)').remove();