javascript – 当我从我的Android设备中选择下一个,在填写表单时,它会跳过任何下拉菜单
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 当我从我的Android设备中选择下一个,在填写表单时,它会跳过任何下拉菜单,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3431字,纯文字阅读大概需要5分钟。
内容图文
![javascript – 当我从我的Android设备中选择下一个,在填写表单时,它会跳过任何下拉菜单](/upload/InfoBanner/zyjiaocheng/718/9100afbd0a924fe78b517885f03dc4a5.jpg)
我有一个由输入文本框,下拉菜单和提交按钮组成的Web表单.
当我在Android手机上使用我的网站 – Chrome浏览器(或我的Android设备上的任何浏览器,我在手机键盘上使用下一个导航到下一个字段.
我表单上的字段序列:
>名字(文字输入)
>姓氏(文字输入)
>天(下拉)
>月(下拉)
>年(下拉)
>地址(文本)zip(文本)
>提交(按钮)
我的Android键盘上的下一个按钮可以正常导航从名字到姓氏.但是,当我在完成输入姓氏后选择下一个时,它会直接转到地址字段.它会跳过下拉字段.
tabbing在桌面和Apple设备上运行良好.这只是Android设备的一个问题.
我应该专门为Android浏览器做些什么吗?
解决方法:
不要将键盘的“下一步”按钮混淆为TAB键,它不是.键盘的下一个按钮只查找键盘可编辑的下一个输入字段,例如文本或数字字段.它将跳过其他所有内容,因为这将需要关闭键盘并调出本机日历或组合框选择器.
如果键盘中存在TAB键,则按预期方式工作.游戏商店中的某些键盘有一个TAB键,如this one.您可以下载并看到按TAB键确实聚焦下一个选择元素或日期输入元素.
以下演示显示了TAB键和Next按钮的区别.你可以看到在使用TAB键导航时,键盘事件触发,显示TAB keyCode 9.但是在使用Next键时,没有键盘事件触发,就好像浏览器甚至不知道刚发生了什么.
document.getElementById('my_form').addEventListener('keydown', function(event) {
document.getElementById('response_view').innerHTML = event.keyCode;
})
<form action="" id="my_form">
<div>
Last Key Press Key Code:
<span id="response_view" style="color: red;"></span>
</div>
<div>
<input type="text" name="first_name" id="first_name" size="35" placeholder="Select it by click">
</div>
<div>
<input type="text" name="last_name" id="last_name" size="35" placeholder="Then use TAB/Next key to focus this input">
</div>
<select name="date_day">
<option value="-1">Select Day</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<div>
<input type="text" name="address" id="address" size="35" placeholder="address">
</div>
</form>
我认为解决此问题的唯一方法是使用JavaScript来跟踪焦点中的输入元素,以确定是否按下了Next键并跳过了select元素,然后通过JavaScript聚焦select元素.
(function(){
let editableElementsSelector = 'input[type=text],input[type=email],input[type=number]';
let nonEditableElementsSelector = 'select,input[type=date],input[type=time]';
let userClickDetected = false, userTouchDetected = false;
// Kepps track of user click for 0.5 seconds
window.addEventListener('click', function() {
userClickDetected = true;
setTimeout(()=>{userClickDetected = false;}, 500);
});
// Kepps track of user touch for 0.5 seconds
window.addEventListener('touchstart', function() {
userTouchDetected = true;
setTimeout(()=>{userTouchDetected = false;}, 500);
});
document.querySelectorAll('form[next-button-fix]').forEach(function(form){
let formElements = form.elements;
let editableElements = form.querySelectorAll(editableElementsSelector);
let nonEditableElements = form.querySelectorAll(nonEditableElementsSelector);
// linking elements
for(let i=1; i<formElements.length; i++){
formElements[i].previousFormElement = formElements[i-1];
formElements[i-1].nextFormElement = formElements[i];
}
// Focuses next element on Next button click
editableElements.forEach(function(element){
element.addEventListener('blur', function(event){
if(!userClickDetected && !userTouchDetected){
if(element.nextFormElement && event.relatedTarget != element.nextFormElement){
element.nextFormElement.focus();
}
}
});
});
// Focuses next element on select element change
nonEditableElements.forEach(function(element){
element.addEventListener('change', function(event){
if(element.nextFormElement){
element.nextFormElement.focus();
}
});
});
});
})();
内容总结
以上是互联网集市为您收集整理的javascript – 当我从我的Android设备中选择下一个,在填写表单时,它会跳过任何下拉菜单全部内容,希望文章能够帮你解决javascript – 当我从我的Android设备中选择下一个,在填写表单时,它会跳过任何下拉菜单所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。