2012-03-24 74 views
0

爲什麼腳本在jQuery的移動可摺疊的火兩次,感謝先進。腳本里面的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/

回答

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

0正在加入

click處理器的兩倍 - see this example

+0

感謝ManseUK,但就像你的「看到這個例子」,爲什麼它被添加兩次(alert('Called');)? – tuanzhang 2012-03-24 09:57:34

0

看起來與方式的問題JQM可摺疊_create功能使用jQuery的wrapInner()。有一個已知的jQuery錯誤(或者它是一個特性?),由此將要被包裝的內容中的腳本標記由domManip邏輯重新執行。美好時光。

如果您可以將腳本移出可摺疊的,那將是理想的。你也許可以砍JQM不使用wrapInner對代碼的特定行:

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

就個人而言,我會去與一個老同學:「如果(alreadyRan)回報; alreadyRan = TRUE;」 - 類型標誌。讓我懷念FORTRAN。

更新

所以我結束了我的JQM的安裝腳本里(在每個頁面上運行和「子」頁)要:

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

似乎很無害的。我總是可以添加一個類到我的腳本並修改選擇器,如果由於某種原因我想要兩次運行內聯腳本。像這樣:

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