首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Javascript的输入框中检测日文IME是否处于活动状态

在Javascript的输入框中检测日文IME是否处于活动状态
EN

Stack Overflow用户
提问于 2021-11-25 19:02:13
回答 1查看 624关注 0票数 1

当用户在Javascript中输入框时,是否有一种检测日语(或其他语言)输入法编辑器处于活动状态的方法?我有一个输入框,它响应enter键来提交表单,但是在用日语IME进行测试时,我意识到用户可能会按enter来确认一个自动完成的候选人,这仍然会触发我自己的代码。

本质上,当输入自动完成建议时,我只希望enter键在IME完全完成其工作时触发表单提交。我确实看到了https://developer.mozilla.org/en-US/docs/Web/API/Element/compositionend_event,它看起来像我可以使用compositionstartcompositionend事件来设置一个布尔值,然后在用户点击enter时检查布尔值;我只是好奇是否有一种方法可以直接询问IME是否是活动的,因为我有点担心手动处理状态可能会变得很脆弱,如果事情变得不同步的话。

编辑:所以我找到了https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/isComposing,它可以用来检查按键事件是否是在IME上下文中触发的,但是导致compositionend事件触发的最后一个Enter没有设置isComposing,所以设置一个布尔值是我发现的唯一有效的东西。但是,存在一个争用条件,取决于keypresscompositionend事件处理程序是先执行,代码可能仍然会错误地导致enter,这会导致IME退出以触发输入提交。我发现的唯一解决办法是在onCompositionEnd事件处理程序中引入异步延迟,以确保始终保持在最后。

这样,在IME中单击Enter时,isIME布尔值为true,keypress事件首先结束,检查isIME布尔值并在未提交答案的情况下完成,然后onCompositionEnd完成并将isIME布尔值设置为false。非决定论并不是很好,但这似乎奏效了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-04 02:17:02

我有一个输入框,它响应enter键来提交表单

别这样就行了。将<input>元素放入<form>中,让代码响应表单的submit事件,而不是特定的键事件。默认情况下,在正常输入中按enter键将选择一个自动完成的候选项或提交表单(但不是两者都提交)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70116138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档