1

我有一个带有几个单选按钮的 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将文本框聚焦,反之亦然。

问题

我无法弄清楚要挂钩哪些事件以使验证按我的意愿工作。

我遇到问题的测试用例:

  1. 在这一系列操作中,警告永远不应该出现:
    1. 从选定的 Foo 收音机开始,文本框中没有文本。
    2. 给文本框焦点(例如点击它);自动检查其他收音机。
    3. 选择 Foo 电台
  2. 当我执行第 3 步时,应首先显示警告:
    1. 从选择 Foo 收音机开始,并且文本框中没有文本。
    2. 给文本框焦点(例如点击它);自动检查其他收音机。
    3. 不要在文本框中输入内容,继续填写表格的其余部分(即关注其他内容)。

我尝试过的事情

  1. 验证文本框的blur(或change)事件。警告在案例 1 步骤 3 中闪烁。这是因为模糊发生在 Foo 收音机被选中之前。

  2. 验证 ul 的blur事件:它没有。

  3. 在文本框的blur事件上,为文档的mouseup事件添加一个处理程序。在 mouseup 上,验证并删除处理程序。当案例 2 第 3 步中的焦点丢失是由单击其他位置引起的时,此方法有效。当失去焦点是由键盘或远离窗口引起的时,它不起作用。或者当多次鼠标点击在时间上重叠时。修复这些似乎会使事情变得过于复杂。

  4. 处理文本框的blur,并setInterval用于调用验证。我找不到延迟的好值;太短意味着缓慢的鼠标点击会导致闪烁,太长意味着验证似乎与导致模糊的操作无关。

4

1 回答 1

0

另一个选项中使用包含li的onmouseout事件怎么样?使用该事件的问题是,当您有嵌套元素并向父元素添加onmouseout事件处理程序时,浏览器会在鼠标指针悬停它的子元素时触发onmouseout事件,但是有脚本可以解决此类问题。

于 2009-11-17T21:25:16.293 回答