javascript – 如何将未处理的按键发送到特定的输入字段?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何将未处理的按键发送到特定的输入字段?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1710字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试做以下事情,看似简单的事情.
If a key is pressed that would have typed a character in a text input field, and that keypress is not already handled elsewhere (e.g. no input field had the focus), then focus one particular input field and type the character there.
这是为了在需要快速响应的浏览器游戏中为用户节省鼠标点击,但它同样可以用在聊天应用程序中.如果用户意外忘记关注这个(大而明显的)输入字段,那么我想优雅地处理它而不是惩罚它们.
注意事项:
>如果任何输入字段具有焦点,则事件应该去那里而不是其他地方.
>不键入字符的键(输入,箭头键,PgUp,PgDn,…)应保留其默认行为.
使用jQuery,我提出了这样的事情:
$(document).keypress(function(e) {
var input = $("#my-input-field");
if (e.which >= ' ' && !input.is(":focus")) {
input.focus();
input.trigger(e);
e.preventDefault();
}
});
但是,这不起作用,原因有两个:
>即使特定输入字段处理它们,事件仍会冒泡到文档.可能的解决方案:
>将keypress事件处理程序连接到所有输入字段并在每个字段中调用stopPropagation,但这听起来像是一个可怕的黑客等待出错.
>检查上面的处理程序输入字段当前是否具有焦点,如果是,则忽略它,但这听起来好像我会遗漏一些其他东西正在使用按键的角落情况.
>调用.trigger(e)不起作用.它确实调用我的自定义事件处理程序,但不会触发实际插入字符的defaut keypress行为.
什么是最干净的出路?
解决方法:
考虑到这一点,事件按此顺序触发:keydown,keyup,keypress.
您可以使用以下内容:
$(document.body).on('keydown', function(e) {
if(document.activeElement.tagName.toLowerCase() != 'input') {
$('#my-default-input').focus();
}
});
然后keydown事件将完成,它将稍后触发keyup事件(在现在聚焦的字段上)并且应该将字符写入字段,然后触发keypress事件,其他事件(如果有的话)绑定到该字段可以使用.
可以更改if语句的内容以过滤掉某些按键,或者添加其他标记,例如< canvas>到“不要触摸”列表.
另请注意,我没有对此进行测试,但理论上应该可行.
内容总结
以上是互联网集市为您收集整理的javascript – 如何将未处理的按键发送到特定的输入字段?全部内容,希望文章能够帮你解决javascript – 如何将未处理的按键发送到特定的输入字段?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。