2012-10-03 35 views
1

試圖將提交事件(或點擊或其他)綁定到jquery移動頁面內的元素。我想要做的是從jQuery頁面中的表單元素中獲取輸入的值,並將其存儲在cookies/localStorage中。每當我回到這個頁面,我想恢復輸入字段。如何在jQuery Mobile頁面綁定提交事件

目前我使用這個腳本結束了:因爲它似乎有可能是相同的頁面保持在DOM

$('.pageClassSelector').live('pageinit', function (e) { 

     $('.classSelector').submit(function() { 
      var q = $('.inputClassSelector').val(); 
      // store to localStorage ... 
     }); 

    // load from localStorage ... 
    $('.q').val(lastSearchString); 

    }); 

這種方法被證明有http://jquerymobile.com/test/docs/api/events.html

,ID選擇都不太有用。我現在的問題是,每次我導航到這個頁面時,提交事件都會被再次綁定,從而導致存儲不同的(!)值。提交事件似乎被多次解僱,而且最後的價值更有趣。

我在做什麼完全錯誤的?任何提示如何正確執行jquery mobile中的腳本?

TRY1:

我現在放在提交像這樣的pagebeforeshow事件中的事件綁定:

$('#PageId').on('pagebeforeshow', function (e) { 
    $('.classSelector').on('submit', function() { 
      var q = $('.q').val(); 
      alert('stored: ' + q);   
    } 
    $('.q').val(lastSearchString); 
} 

但將被存儲的值仍是值前的最後一次,當我導航之前的頁面。第一次它應該如此。

TRY2:

這是我現在,它看起來像它做什麼我想要的。我現在選擇當前頁面並僅選擇本頁面的子窗體。 這是一個好習慣嗎?

$('div:jqmData(id="PageId")').on('pagebeforeshow', function (e) { 

    $(this).find('#form').on('submit', function() { 
     var q = $(this).find('#input').val(); 
     localStorage.setItem("key", q); 
     return true; 
    }); 

    lastSearchString = localStorage.getItem("key"); 
    $(this).find('#input').val(lastSearchString);   
}); 

回答

1

您需要從本地存儲器加載並存儲在頁面上需要通過綁定到pagebeforeshow事件(請參閱「頁面轉換事件」一節)而不是您正在執行的pageinit事件來完成。此外,通常每個頁面元素(您有data-role ='page')應該有一個唯一的ID,因此您可以使用它而不是CSS選擇器。

+0

你的意思是說,每次我瀏覽到同一頁面時,這個頁面應該有一個唯一的ID? – dasheddot

+0

不,我的意思是每頁有一個唯一的ID。你可以在這裏看到JQuery手機的解剖頁面http://jquerymobile.com/demos/1.2.0/docs/pages/multipage-template.html(忽略這是最新的版本,它仍然適用於您)。 – ramsinb

+0

好的,那是在我的應用程序的情況。我喜歡你的建議,請參閱我的編輯。 – dasheddot

0
$('.classSelector').on('submit', function(){}) 

Try to use the constraction to bind your event to element. 
Look likes some data was loaded through ajax request 
+0

jQuery mobile通過ajax調用加載每個頁面,是的。嘗試你的方法,但沒有任何區別..任何進一步的提示? – dasheddot

相關問題