2012-08-15 76 views
1

我有多個<select/>標籤我想同步,以便當一個被更改時,他們都改變。它們都是jquery移動頁面的導航欄標題的一部分。我的選擇是這樣的:$("header select")用jquery更新多選標籤(手機)

我迷上了change事件是這樣的:

var statusselect = $("header select"); 

var statusevent = function (event) { 

    statusselect.off("change"); 

    statusselect.val(event.target.value); 

    statusselect.on("change", statusevent); 

    try { 
     statusselect.selectmenu("refresh"); 
    } 
    catch(e) { 

    } 
}; 

statusselect.on("change", statusevent); 

這隻能如果我有try/catch聲明。如果我取出try/catch及其內部代碼,則<select/>的文本僅在第一次更改後更新。之後,事件被正確觸發並且所有傳遞的值都是正確的,但文本從不更新(顯示正確選擇的選項)。

如果我拿出try/catch並離開statusselect.selectmenu("refresh"),則會拋出異常,指出該對象尚未初始化。

因此,我仍然抓我的頭:爲什麼我需要拋出一個異常,以便<select/>改變它的文本?是否因爲不在視圖中的<select/>引發異常?

回答

0

我想你回答了你自己的問題,refresh方法是爲了刷新(在這種情況下selectmenu)一個小部件,已經初始化,你的情況對於那些在其他頁面上的選擇初始化沒有采取(增強功能發生在pageinitevent),因此您需要首先初始化它,您應該能夠通過調用.selectmenu()手動進行初始化。

+0

好的,所以在pageinit事件中調用'selectmenu()'?或之前? – 2012-08-15 19:36:19

+0

根據JQM文檔,大多數小部件應該基於'pageinit事件'自動初始化自己,因此一旦事件觸發就不需要這麼做。你發生的事情是事件還沒有被解僱,如果你想手動調用它,那麼你可以在事件發生之前這麼做,或者只是將它放在catch塊中。 – Jack 2012-08-15 19:43:17

+0

啊,好的,那是我以爲你在說什麼。謝謝! – 2012-08-15 19:46:45