我在 iOS 浏览器(chrome 和 safari)中的多选列表有问题。在我的情况下,我在选择上有一个角度模型绑定,它会在我关注选择时触发观察者并更新模型值。我相信这是 iOS 9.2 中的一个错误。以下是具体症状:
铬合金:
一旦选择元素获得焦点,就会触发“change”事件并将值设置为第一项,即使 UI 没有显示任何选择。从列表中选择不同的选项并关闭 iOS 覆盖后,该值会更改为正确的值。如果您再次关注它,“更改”事件将再次触发,并再次添加第一个选项的值。这次关闭覆盖会保留选中的第一个项目。
苹果浏览器:
一旦选择元素被聚焦,就会触发“change”事件并将值设置为第一项。在这种情况下,叠加层中的 UI 不显示任何选择,但原始选择中的文本现在将第一个项目显示为已选择。实际上第一次选择时,即使 UI 清楚地显示您现在已经选择了第一个项目,也会将该值设置为 null。当您聚焦和模糊选择时,它将继续切换列表中第一个选项的值的包含。基本上除了不正确地将第一项添加到焦点值之外,此浏览器还失去了值和 UI 之间的同步。
我创建了一个非常简化的 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(仅用于记录事件和值)
$('select').change(function(event){
$('div').append('<p>change:'+$('select').val()+'</p>');
});
这是一个已知的问题?有什么变通办法吗?