0

我正在使用 html 选择元素作为活动菜单。当您从中选择一个项目时,它会执行一个操作,然后在某些情况下,该操作的副作用是将菜单的值重置为其他值。

function onMenuChangeHandler() {
    var menu = $('#menu');
    var menuChoice = menu.val();
    if (menuChoice == ...) {
        ...
        menu.blur(); // ensure change handler doesn't get fired again
        menu.val(OTHER_VALUE);  // **
    }
};

这在多个浏览器的桌面上运行良好,在 iOS5 上运行良好。它莫名其妙地停止了在 iOS6 上的工作。结果是它的行为就像**上面标记的行不存在一样。

在我不设置值的任何情况下它都可以正常工作。

仅供参考:iOS6 的另一个变化似乎与此无关,但以防万一。选择菜单后,它现在会立即关闭选择器,而不是让它保持打开状态。这就是它在所有其他平台上的工作方式。如果您有多个选择元素,您仍然会得到非标准行为。

4

1 回答 1

0

我花了很多时间试图追踪这一点,最终发现问题是 iOS6 在我的更改处理程序退出后第二次设置控件的值。如果我输入警报,我可以清楚地看到控件更改为OTHER_VALUE(警报下方)。然后,当我解除警报时,控制恢复。(没有警报,变化发生得太快而无法看到。)

所以这里有一个解决方法:

function onMenuChangeHandler() {
    var menu = $('#menu');
    var menuChoice = menu.val();
    if (menuChoice == ...) {
        ...
        setTimeout(function() {
                menu.blur(); // ensure change handler doesn't get fired again
                menu.val(OTHER_VALUE);
            }, 1);
    }
};

也许其他人有更好的答案或更好的解释。

于 2012-10-13T04:42:04.920 回答