我想弄清楚在移動Safari,Android瀏覽器和Android的Firefox(「Fennec」)中看到的效果是一個錯誤或預期的行爲。基本上,問題是在某些情況下,即使<input>
元素最初未被用戶點擊,<input>
元素也可以在某些情況下接收鍵盤焦點。這是一個錯誤?點擊一個元素可能會導致不同的元素接收鍵盤焦點
這裏是一個可再現的測試案例:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width, user-scalable=no">
<style>
#screenCover {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.3);
z-index: 1;
}
#newItemInput {
position: absolute;
width: 200px;
height: 20px;
}
</style>
</head>
<body>
<div id="screenCover"></div>
<input id="newItemInput" type="text">
<script type="text/javascript" language="JavaScript">
var screenCoverEl = document.getElementById("screenCover"),
newItemInputEl = document.getElementById("newItemInput");
newItemInputEl.value = String(navigator.userAgent);
screenCoverEl.addEventListener("touchend", function (event) {
// Move the <input> element in the way.
newItemInputEl.style.top = (event.changedTouches[0].clientY - 10) + "px";
newItemInputEl.style.left = (event.changedTouches[0].clientX - 10) + "px";
// Hide the screen cover. Note that the screen cover was the original target of the tap.
screenCoverEl.style.display = "none";
}, false);
newItemInputEl.addEventListener("click", function (event) {
this.setSelectionRange(0, this.value.length);
}, false);
</script>
</body>
</html>
在移動瀏覽器
或者直接:
http://fiddle.jshell.net/f7TKc/2/show/
在這個例子中,屏幕蓋位於上方該文檔,但在touchend
上,屏幕封面被隱藏,並移動了元素<input>
到用戶點擊屏幕蓋的地方。在Mobile Safari,Android Browser和Fennec 13.0b1中,<input>
元素莫名其妙地收到了鍵盤焦點。
我不能在較新版本的Fennec中測試它,因爲它在模擬器中崩潰。
這是一個錯誤或預期的行爲?
HTTP ://code.google.com/p/android/issues/detail?id = 6721? – Slartibartfast