iOS 9.2:select列表(多个)错误地触发更改事件并将值设置为焦点上的第一个选项。 (safari和铬)

我在iOS浏览器中有多个select列表(铬和Safari)的问题。 在我的情况下,我有一个angular度模型绑定的select是射击观察员和更新模型值,只要我专注于select。 我相信这是iOS 9.2中的一个错误。 以下是具体的症状:

铬:

只要select元素被聚焦,“更改”事件就会被触发并且值被设置为第一项,即使UI没有显示select。 从列表中select不同的选项并closuresiOS覆盖图后,该值将更改为正确的值。 如果您再次关注它,则再次触发“更改”事件,并再次添加第一个选项的值。 这次closures叠加层会留下所选的第一个项目。

苹果浏览器:

只要select元素被聚焦,“更改”事件就会被触发,并且该值被设置为第一项。 在这种情况下,叠加层中的用户界面不显示select内容,但原始select中的文本现在将第一个项目显示为选定内容。 实际上第一次select,即使用户界面清楚地显示你已经select了第一个项目,该值设置为null。 当你关注和模糊select时,它将继续切换列表中第一个选项的值。 基本上,除了第一个项目添加到焦点值之外,该浏览器也失去了值和UI之间的同步。

我创build了一个非常简化的jsfiddle来演示这种行为。

http://jsfiddle.net/u922mnvv/4/

HTML

<select name="test" multiple> <option value="test1">test1</option> <option value="test2">test2</option> <option value="test3">test3</option> <option value="test4">test4</option> <option value="test5">test5</option> <option value="test6">test6</option> </select> <div> Log: </div> 

JS(仅用于logging事件和值)

 $('select').change(function(event){ $('div').append('<p>change:'+$('select').val()+'</p>'); }); 

这是一个已知的问题? 有什么解决办法吗?

我遇到过同样的问题。 这个答案有助于解决它:

诀窍是在第一个位置添加一个空的和禁用的select选项:

 <select multiple> <option disabled></option> <option value="test1">Test 1</option> <option value="test2">Test 2</option> <option value="test3">Test 3</option> </select> 

这将防止iOS自动select第一个选项,并保持select值正确和干净!

空白选项不可见,select的计数是正确的。