我有一个带有几个单选按钮的 HTML 表单。前几个是普通收音机,但最后一个与文本框相关联。我想运行一些 JavaScript 验证,以在用户选择“其他”而不使用文本框提供值时警告用户。
功能性 HTML + JS 链接如下,但 HTML 的粗略轮廓是:
<ul>
<li>
<input type="radio"/> foo
</li>
<li>
<input type="radio"/> bar
</li>
<li>
<input type="radio"/> other, please specify:
<input type="text"/> <span class="error">please provide a value</span>
</li>
</ul>
当检查另一个收音机时,我有一些JavaScript将文本框聚焦,反之亦然。
问题
我无法弄清楚要挂钩哪些事件以使验证按我的意愿工作。
我遇到问题的测试用例:
- 在这一系列操作中,警告永远不应该出现:
- 从选定的 Foo 收音机开始,文本框中没有文本。
- 给文本框焦点(例如点击它);自动检查其他收音机。
- 选择 Foo 电台
- 当我执行第 3 步时,应首先显示警告:
- 从选择 Foo 收音机开始,并且文本框中没有文本。
- 给文本框焦点(例如点击它);自动检查其他收音机。
- 不要在文本框中输入内容,继续填写表格的其余部分(即关注其他内容)。
我尝试过的事情
验证文本框的blur(或change)事件。警告在案例 1 步骤 3 中闪烁。这是因为模糊发生在 Foo 收音机被选中之前。
验证 ul 的blur事件:它没有。
在文本框的blur事件上,为文档的mouseup事件添加一个处理程序。在 mouseup 上,验证并删除处理程序。当案例 2 第 3 步中的焦点丢失是由单击其他位置引起的时,此方法有效。当失去焦点是由键盘或远离窗口引起的时,它不起作用。或者当多次鼠标点击在时间上重叠时。修复这些似乎会使事情变得过于复杂。
处理文本框的blur,并
setInterval
用于调用验证。我找不到延迟的好值;太短意味着缓慢的鼠标点击会导致闪烁,太长意味着验证似乎与导致模糊的操作无关。