Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery…触发按键,并指定按下的键_Javascript_Jquery_Triggers_Keypress - Fatal编程技术网

Javascript 使用jQuery…触发按键,并指定按下的键

Javascript 使用jQuery…触发按键,并指定按下的键,javascript,jquery,triggers,keypress,Javascript,Jquery,Triggers,Keypress,我希望有一个输入元素(type=text)或textarea元素,通过触发特定的击键来进行动态验证。这将用于汉语拼音输入,例如: 用户在输入元素中键入“ma2”。每次击键都会触发keydown事件,而2永远不会出现。相反,当用户按下“2”时,“a”将收到一个音调标记,如:“a”。最后,用户将键入:“má” 这可以通过使用$(element).val()读取和更改整个输入值来实现。但是,当输入元素具有焦点并且通过调用.val(“某物”)来设置其值时,光标将移动到文本的末尾。这在大多数情况下都很好,

我希望有一个输入元素(type=text)或textarea元素,通过触发特定的击键来进行动态验证。这将用于汉语拼音输入,例如:

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

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

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


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

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


您触发按键的运气可能不太好-我敢肯定,除非按键是可信的(即源自浏览器),否则它不会被拾取

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

我制作了一个小演示-您将看到的替换项与实际单词不匹配,但它显示了它的工作原理:

(编辑源)

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


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

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

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