2012-08-15 78 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