使用 Mobile Safari“表单助手”在选择元素上未触发更改事件

Posted

技术标签:

【中文标题】使用 Mobile Safari“表单助手”在选择元素上未触发更改事件【英文标题】:Change event not firing on select elements with Mobile Safari "form assistant" 【发布时间】:2011-12-02 14:51:07 【问题描述】:

我有动态选择下拉菜单。例如,如果您选择特定月份,则第二个选择元素将填充该月的天数。

这按预期工作,但是当用户在 iPhone 上并使用 Mobile Safari 的“表单助手”中内置的“下一步”按钮时,change 事件(使用 jQuery)似乎不会触发,第二个选择不更新。

$('.month').change(function() 
    // update "days" select element
);

仅供参考,我也在使用 jQuery 移动版

【问题讨论】:

iPhone 调试器中的任何输出(Safari 调试模式)? 无。我在想这可能只是一个移动 safari 错误。 【参考方案1】:

您还可以绑定一些额外的事件,例如blur(虽然不知道模糊是否会在 iphone 上触发)

$('.month').bind('change blur',function()

);

或者你有没有试过:

$('.month').live('change',function()
);

【讨论】:

感谢您的建议。我尝试了几个不同的事件,因为我认为这可能是问题所在。无法开火。 月份选择在 DOM 中是静态的,因此我认为没有必要使用 live() 函数。无论如何我试了一下,没有运气。 @wdm hm 太糟糕了。我在这里找到它***.com/questions/6431611/…【参考方案2】:

我能找到的最佳解决方法是基于这篇文章...

Strange behavior of select/dropdown's onchange() JS event when using 'Next' on Mobile Safari Dropdown list item select box

使用该插件(来自上面的链接),一旦使用 Mobile Safari 的“表单助手”选择了一个选项,我就必须将选择菜单强制设置为 blur

然而,我注意到,在对这些菜单进行暴力测试时,会在几次来回选择后触发一个额外的 blur 事件。额外的focus 似乎可以解决这个问题。

$('select').quickChange(function () 
    $(this).blur();
    $('select').focus(); // somehow prevents an extra blur from firing on focus
);

通过单独的change 函数,我正在动态更新第二个选择菜单。

$("#select-choice-month").change(function () 
    // update second select dynamically
);

*目前仅在 Mobile Safari / ios 5.0.1 上测试。

【讨论】:

以上是关于使用 Mobile Safari“表单助手”在选择元素上未触发更改事件的主要内容,如果未能解决你的问题,请参考以下文章

在 Mobile Safari 中选择 onchange 后,将焦点设置为输入字段

在 iOS Mobile Safari 和/或 UIWebView 中控制文本选择行为?

对选择合适的 iOS Mobile Safari Web 开发工具(jQuery Mobile/Sencha Touch/etc)感到沮丧

HTML5 Mobile Safari DatePicker - 初始值

让 WebSocket 在 Mobile Safari 中保持活跃

隐藏 Safari 组件时如何使用 jQuery Mobile 从错误加载页面中恢复?