Luk*_*nis 10 javascript iphone html5 mobile-safari ios7
在iOS 7上,<select>Mobile Safari中的菜单在用户单击"完成"之后才会触发更改事件.当用户的选择发生变化时,是否还有其他可以听到的事件?
<select onchange="alert('This will not fire until the user clicks Done')">
<option>1</option>
<option>2</option>
</select>
Run Code Online (Sandbox Code Playgroud)
Onu*_*rım 12
在用户触摸"完成"之前无法确定新的选择值.
当用户首次触摸<select>控件时,iOS会打开选择选项的本机UI.这不是DOM.当用户触摸"完成"时,它会发送新值/索引并在DOM上触发相应的事件.
你可以测试一下.只需设置两个事件:onfocus将设置一个计时器并连续轮询,selectedIndex直到onblur触摸"完成"时销毁计时器.
<select id="my-select" onfocus="checkSelectedIndex()" onblur="selectDone()">
<option>1</option>
<option>2</option>
</select>
Run Code Online (Sandbox Code Playgroud)
var timer;
// timer setup on focus
function checkSelectedIndex() {
timer = window.setInterval(function () {
console.log('selected index:', document.getElementById('my-select').selectedIndex);
}, 500); // 2 polls per second
}
// timer cleared on blur
function selectDone() {
console.log('Selection changed!');
if (!timer) { return; }
window.clearInterval(timer);
}
Run Code Online (Sandbox Code Playgroud)
通过此测试,即使您在UI上更改了所选项目,您也会看到它; 在您触摸"完成"(即最终消息发送到DOM时)之前,记录的索引不会更改.
所以,你能做的是; (有一些UX权衡); 而不是一个<select>元素,创建一个自定义控件,弹出一个<div>或一个选项列表<ul>.这样,您就不会触发本机UI,用户也不会离开DOM.并且您将能够收听菜单和点击项目的事件.
只需确保您的控件感觉适合移动设备.
| 归档时间: |
|
| 查看次数: |
4371 次 |
| 最近记录: |