javascript - 使用 jQuery 触发按键...并指定按下哪个键

标签 javascript jquery triggers keypress

我想要一个输入元素 (type=text) 或 textarea 元素,通过触发特定的击键来动态验证。这将用于中文拼音输入,例如:

用户在输入元素中键入“ma2”。每次击键都会触发 keydown 事件,并且 2 永远不会出现。相反,当用户按下“2”时,“a”将收到一个声调标记,如下所示:“á”。最后,用户将输入:“má”。

这可以通过使用 $(element).val() 读取和更改整个输入值来完成,但是,当输入元素具有焦点并且它的值是通过调用 .val("something") 设置时,光标移动到文末。这在大多数情况下都可以正常工作,因为用户只是在字段末尾继续输入,但我希望它在所有情况下都能正常工作。

...此问题的另一个解决方案是获取/设置光标在输入或文本区域元素中的位置。不过,我认为这在 javascript 中是不可能的。


所以,雷米肯定走在正确的轨道上。无论如何,触发按键都不允许我输入特殊字符而没有很多麻烦。相反,我捕获了 keydown 事件并设置输入/文本区域的值,然后移动插入符号。

我还没有发现任何适合在 jQuery 中获取/设置插入符的东西,但下面的内容确实为我解决了这个问题。当它稳定时,我会发布一个链接到我的最终拼音输入代码。现在已经很接近了。

http://blog.vishalon.net/Post/57.aspx http://demo.vishalon.net/getset.htm

最佳答案

触发按键的运气可能不太好 - 我相当确定除非按键是可信的(即来自浏览器),否则它不会被拾取。

但是,您可以进行文本替换并将克拉插入原来的位置 - 而不是将其插入字符串的末尾。您需要使用 setSelectionRange 和 createTextRange(对于 IE)。

我整理了一个小演示 - 您将看到的替换与真实单词不匹配,但它展示了它是如何工作的:

http://jsbin.com/emudi/ (编辑来源http://jsbin.com/emudi/edit)

诀窍是记下 carat 的位置,使用 substr 替换找到的单词(而不是正则表达式以避免替换错误的匹配项),然后将 carat 重新放在新单词的末尾。

替换是在空格键或模糊距离上触发的。关于这一点的注意事项 - 您可以在特定字符(即“2”)上触发替换 - 但我不建议在每个按键时搜索替换。

关于javascript - 使用 jQuery 触发按键...并指定按下哪个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/202285/

相关文章:

javascript - IF-ELSE 语句不起作用

javascript - Firebug 的 jQuery 不会在我的网站上加载

mysql - mysql语法触发器错误

database - 如何使用 postgresql 触发器设置 UUID

javascript - 为什么异步函数中的setTimeout需要再次包装在新的Promise中?

javascript - 如何防止在文本框中输入前导空格?

javascript - 为什么我的 JS slider 不工作?

sql - 插入和更新触发器

javascript - 为什么控制台中不显示 html 中的 AngularJS 错误?

javascript - 将嵌套的json存储到 Node 中的mysql数据库中