Skip to content

fix(select): ignore the Enter that confirms an IME composition#4305

Open
greymoth-jp wants to merge 2 commits into
Tencent:developfrom
greymoth-jp:fix/select-ime-composition-enter
Open

fix(select): ignore the Enter that confirms an IME composition#4305
greymoth-jp wants to merge 2 commits into
Tencent:developfrom
greymoth-jp:fix/select-ime-composition-enter

Conversation

@greymoth-jp

Copy link
Copy Markdown

🤔 这个 PR 的性质是?

  • 日常 bug 修复

🔗 相关 Issue

💡 需求背景和解决方案

Select 开启 filterable 后,在过滤输入框里用输入法(中文 / 日文等)打字时,按 Enter 确认候选词会被当成“选中当前高亮项”,候选词刚上屏就误选了一个选项。

原因在 select/hooks/useKeyboardControl.tshandleKeyDown:它用 switch (e.code) 判断按键,而 e.code 在输入法合成期间各浏览器都仍是 'Enter',所以确认候选词的那次 Enter 也进入了 case 'Enter' 的选中分支,并没有判断当前是否处于合成态。

同仓库的 TagInput 已经处理过同类场景:onInputEnter 里用 if (!isCompositionRef.current) 跳过确认合成的 Enter,避免误加标签。这里沿用相同约定,在 case 'Enter' 开头加一行 if (e.nativeEvent.isComposing) break;,确认候选词的 Enter 不再选中选项,普通 Enter 行为保持不变。

另外补了一个测试:filterable 的 Select 下,合成态的 Enter 不会触发 onChange,普通 Enter 仍会选中高亮项。

补充说明:本地没能跑通完整测试套件,packages/common 子仓库在我这边没有检出、根工作区还引用了一个缺失的 AIGC 包,pnpm install 无法装完。改动只涉及基础组件,逻辑已按代码路径逐处核对,测试也是照现有用例的写法写的,麻烦 CI 跑一下确认。

📝 更新日志

tdesign-react

  • fix(Select): 修复 filterable 模式下确认输入法候选词的 Enter 会误选高亮选项的问题

☑️ 请求合并前的自查清单

  • 文档已补充或无须补充
  • 代码演示已提供或无须提供
  • TypeScript 定义已补充或无须补充
  • Changelog 已提供或无须提供

@tdesign-bot

tdesign-bot commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator

TDesign Component Site Preview Open

Component Preview
tdesign-react 完成
@tdesign-react/chat 完成

@pkg-pr-new

pkg-pr-new Bot commented Jul 1, 2026

Copy link
Copy Markdown
  • tdesign-react-demo

    npm i https://pkg.pr.new/Tencent/tdesign-react@4305
    
    npm i https://pkg.pr.new/Tencent/tdesign-react/@tdesign-react/chat@4305
    

commit: 412114e

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants