因爲你沒有爲我們提供更多的代碼,我只能爲您提供一個補丁你的問題。 jQuery Mobiles的工作性質會在綁定事件時導致一些問題。 jQuery事件綁定沒有檢查將阻止多個事件(相同的事件,例如點擊事件)綁定到單個元素。
這可以通過很少的方式來預防,我會爲你列舉所有這些,但我認爲你的問題與多事件綁定無關,因爲不像jQuery jQuery Mobile頁面事件綁定會阻止多重綁定,在這種情況下,你將在我的答案底部找到您的解決方案。
解決方案1:
將其綁定你之前刪除事件:
$('#index').live('pagebeforeshow',function(e,data){
$('#test-button').die().live('click', function(e) {
alert('Button click');
});
});
如果你有綁定到對象不同的事件:
$('#index').live('pagebeforeshow',function(e,data){
$('#test-button').die('click').live('click', function(e) {
alert('Button click');
});
});
解決方案2:
使用jQuery的過濾器選擇,就像這樣:
$('#carousel div:Event(!click)').each(function(){
//If click is not bind to #carousel div do something
});
由於事件過濾器是不是官方的jQuery框架的一部分,它可以在這裏找到:http://www.codenothing.com/archives/2009/event-filter/
簡而言之,如果速度是你的主要關注那麼解決方法2是更好的解決方案,然後1
解決方案3:
一個新的,可能是一個最簡單的這一切。
$(document).on('pagebeforeshow', '#page', function(event){
if(event.handled !== true) // This will prevent event triggering more then once
{
// Some code
event.handled = true;
}
return false;
});
TNX到sholsinger此解決方案:http://sholsinger.com/archive/2011/08/prevent-jquery-live-handlers-from-firing-multiple-times/
pageChange事件怪癖 - 觸發兩次
有時pagechange事件可以觸發兩次,它沒有任何與前面提到的問題。
pagebeforechange事件發生兩次的原因是由於changePage中的遞歸調用,當toPage不是jQuery增強的DOM對象時。這種遞歸是危險的,因爲開發者被允許在事件中改變toPage。如果開發人員在pagebeforechange事件處理程序中始終將toPage設置爲字符串,則無論該對象是否爲對象,都將導致無限遞歸循環。頁面加載事件將新頁面作爲數據對象的頁面屬性傳遞(應將其添加到文檔中,但目前未列出)。 pageload事件因此可以用來訪問加載的頁面。
這幾句話是因爲您通過pageChange發送附加參數而發生的。
例子:
<a data-role="button" data-icon="arrow-r" data-iconpos="right" href="#care-plan-view?id=9e273f31-2672-47fd-9baa-6c35f093a800&name=Sat"><h3>Sat</h3></a>
要解決此問題,使用本章Page events transition order列出的任何頁面事件(這是關於jQuery Mobile的頁面事件綁定我的其他答案/條)。
我在下面的回答中爲您提供了一個解決方案,如果您需要更多幫助,請通過我的電子郵件與我聯繫。 – Gajotres 2013-02-09 16:33:30