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

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

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

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


所以,雷米肯定是在正确的轨道上。触发按键不允许我输入特殊字符而不会有很多麻烦。相反,我捕获keydown事件并设置输入/ textarea的值,然后移动插入符号。

我没有发现任何有关插入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

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

在空间印刷机上触发更换或模糊离开。关于此的说明 - 您可以触发特定字符(即“2”)的替换 - 但我不建议在每个按键上搜索替换。

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top