4

我想要一个通过触发特定击键来动态验证的输入元素(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

4

2 回答 2

8

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

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

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

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

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

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

于 2008-10-14T23:57:02.077 回答
1

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

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

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

于 2010-02-21T18:23:16.257 回答