使用jQuery触发按键操作...并指定按下的是哪个按键。

4
我希望有一个输入元素(type=text)或文本区域元素,通过触发特定的按键动态验证。这将用于中文拼音输入,例如:
用户在输入元素中键入“ma2”。每次按键时都会触发keydown事件,并且数字2永远不会出现。相反,当用户按下“2”时,“a”将接收一个声调标记,如此:“á”。最终,用户将键入:“má”。
这可以通过使用$(element).val()读取和更改整个输入值来实现,但是,当输入元素具有焦点并且通过调用.val("something")设置其值时,光标将移动到文本的末尾。在大多数情况下,这很好用,因为用户只需在字段末尾继续输入,但是我希望在所有情况下都能正常工作。
...解决此问题的另一种方法是获取/设置输入或文本区域元素中光标的位置。然而,我认为这在javascript中是不可能的。

所以,Remy肯定是正确的。触发按键并不会让我轻松地输入特殊字符。相反,我捕获keydown事件并设置输入/文本区域的值,然后移动光标。

我没有找到jQuery中好的光标获取/设置方法,但以下内容真正解决了我的问题。当我的最终拼音输入代码稳定后,我将发布链接。现在它已经非常接近了。

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

2个回答

8
您可能不太容易触发按键事件 -我相当确定,除非按键是可信的(即来自浏览器),否则它不会被捕获。
但是,您可以进行文本替换并将插入符号插入回原来的位置,而不是将其射到字符串的末尾。您需要使用setSelectionRange和createTextRange(用于IE)。
我制作了一个小演示-您将看到的替换与实际单词不匹配,但它展示了它的工作原理: http://jsbin.com/emudi/(编辑源代码http://jsbin.com/emudi/edit
技巧是注意插入符号的位置,在使用substr替换找到的单词时(而不是使用正则表达式以避免替换错误的匹配项),然后将插入符号重新放置在新单词的末尾。
替换是通过按空格键或模糊离开触发的。关于此的注释-您可以在特定字符上触发替换(即“2”)-但我不建议在每个按键上搜索替换。

1
此外,对于以跨浏览器方式控制“插入符号”(caret)的简单代码,这可能会很有用:

http://javascript.nwbox.com/cursor_position/

回答有点晚了,但我相信你仍然会发现这些旧的东西很有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接