jQueryUI 模式对话框不会阻止 RETURN keyup 事件(或 ESCAPE)
jQueryUI modal dialog doesn't block RETURN keyup event (or ESCAPE)
我正在使用 jQueryUI 模式 dialog 小部件来模拟 "alert" 框。一切都按预期工作,在对话框打开时键盘输入被阻止,除非我用 RETURN 或 ESCAPE[= 关闭对话框32=] 键然后我得到一个杂散的 "keyup" 事件命中我的应用程序。当模态对话框应该阻止所有输入时,为什么会发生这种情况?
这是一个演示问题的 JSfiddle - https://jsfiddle.net/kmbro/x7w6hLtg/ - 这里是一些让 Whosebug 对 JSfiddle 感到满意的代码 link :-)
$("<div/>").dialog({ modal: true, ... });
虽然 dialog()
似乎是允许 ESCAPE "keyup" 事件泄漏的罪魁祸首,但我不认为它对 RETURN。这似乎集中于 RETURN 键如何生成按钮 "click" 事件,因为它们在 "keydown" 上触发,而使用空格键按下按钮触发 "keyup" 上的 "click",因此对话框在 "keyup" 事件发生之前关闭。您可以通过按 Click Me! 按钮,然后按 RETURN 按钮来查看 - 对话框在 "keydown".如果您使用 SPACE 按下按钮,那么在您释放按键时,直到 "keyup" 才会打开对话框。
问题是,RETURN 有什么特别之处,它会在 "keydown" 而不是 [=42= 上触发 "click" 事件]?
似乎 RETURN 键触发 "keydown" - "click" - "keyup" 只是浏览器的工作方式 - 请参阅 https://bugs.jqueryui.com/ticket/15194 - 所以我'我们只需要学会忍受它。
我正在使用 jQueryUI 模式 dialog 小部件来模拟 "alert" 框。一切都按预期工作,在对话框打开时键盘输入被阻止,除非我用 RETURN 或 ESCAPE[= 关闭对话框32=] 键然后我得到一个杂散的 "keyup" 事件命中我的应用程序。当模态对话框应该阻止所有输入时,为什么会发生这种情况?
这是一个演示问题的 JSfiddle - https://jsfiddle.net/kmbro/x7w6hLtg/ - 这里是一些让 Whosebug 对 JSfiddle 感到满意的代码 link :-)
$("<div/>").dialog({ modal: true, ... });
虽然 dialog()
似乎是允许 ESCAPE "keyup" 事件泄漏的罪魁祸首,但我不认为它对 RETURN。这似乎集中于 RETURN 键如何生成按钮 "click" 事件,因为它们在 "keydown" 上触发,而使用空格键按下按钮触发 "keyup" 上的 "click",因此对话框在 "keyup" 事件发生之前关闭。您可以通过按 Click Me! 按钮,然后按 RETURN 按钮来查看 - 对话框在 "keydown".如果您使用 SPACE 按下按钮,那么在您释放按键时,直到 "keyup" 才会打开对话框。
问题是,RETURN 有什么特别之处,它会在 "keydown" 而不是 [=42= 上触发 "click" 事件]?
似乎 RETURN 键触发 "keydown" - "click" - "keyup" 只是浏览器的工作方式 - 请参阅 https://bugs.jqueryui.com/ticket/15194 - 所以我'我们只需要学会忍受它。