javascript - 在没有 Internet Explorer 关闭框的情况下添加选项以选择框?

标签 javascript ajax

我正在尝试构建一个网页,其中包含许多下拉选择框,这些选择框会在首次打开时异步加载它们的选项。这在 Firefox 下工作得很好,但在 Internet Explorer 下就不行了。

下面是我正在努力实现的一个小例子。基本上,有一个选择框(id 为“selectBox”),其中只包含一个选项(“Any”)。然后是一个 onmousedown 处理程序,它在单击该框时加载其他选项。

<html>
 <head>
  <script type="text/javascript">
    function appendOption(select,option) {
      try {
        selectBox.add(option,null); // Standards compliant.
      } catch (e) {
        selectBox.add(option);      // IE only version.
      }
    }

    function loadOptions() {
      // Simulate an AJAX request that will call the
      // loadOptionsCallback function after 500ms.
      setTimeout(loadOptionsCallback,500);
    }

    function loadOptionsCallback() {
      var selectBox = document.getElementById('selectBox');
      var option = document.createElement('option');
      option.text = 'new option';
      appendOption(selectBox,option);
    }
  </script>
 </head>
 <body>
  <select id="selectBox" onmousedown="loadOptions();">
   <option>Any</option>
  </select>
 </body>
</html>

所需的行为(Firefox 所做的)是:

  1. 用户看到的是一个包含“Any”的关闭选择框。
  2. 用户点击选择框。
  3. 选择框打开以显示唯一的选项(“任何”)。
  4. 500 毫秒后(或 AJAX 调用返回时),下拉列表会扩展以包含新选项(在此示例中硬编码为“新选项”)。

这正是 Firefox 所做的,这很棒。但是,在 Internet Explorer 中,只要在“4”中添加新选项,浏览器就会关闭选择框。选择框确实包含正确的选项,但该框已关闭,需要用户单击以重新打开它。

那么,对于如何在 IE 不关闭下拉框的情况下异步加载选择控件的选项,有没有人有任何建议?

我知道我可以在点击框之前加载列表,但我正在开发的真实表单包含许多这样的选择框,它们都是相互关联的,所以它将是如果我可以只在需要时加载每组选项,那么对于客户端和服务器来说会更好

此外,如果结果是同步加载的,在选择框的 onmousedown 处理程序完成之前,IE 将按预期显示完整列表 - 然而,同步加载是一个 这里的想法,因为它会在网络请求发生时完全“锁定”浏览器。

最后,我还尝试使用 IE 的 click() 方法在添加新选项后打开选择框,但不会重新打开选择框。

任何想法或建议将不胜感激!! :)

谢谢!

保罗。

最佳答案

您是否考虑过在表单上其他相关字段之一的 onblur 事件中调用 loadOptions 方法?这会在单击之前将列表加载到下拉框中,但行为应该仍然相似。

我认为您将探索略有不同的选项来获得您想要的内容,因为如果您使用 onmousedown 或 onclick 事件,您可能无法使用 Internet Explorer 关闭下拉列表。使用这些事件的另一个缺点是,如果用户使用键盘选择字段,您的方法可能永远不会被调用。

关于javascript - 在没有 Internet Explorer 关闭框的情况下添加选项以选择框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/113218/

相关文章:

java - 没有 cookie 的 Servlet session + 仅返回 JSON 的 ajax 请求

javascript - Microsoft Edge 阻止发送到同一专用网络 CIDR 中的 IP 的跨域请求

Javascript - 如何使用 'a' 作为变量使 'href' 元素成为链接

javascript - 在 ScrollTrigger GSAP 水平滚动中为子元素设置动画

javascript - GSAP Javascript if else 语句问题

javascript - 无法让ajax请求在jquery中使用json工作

javascript - 如果网页未加载,则显示评论/信息框的 Ajax 代码

javascript - 使用 Ruby on Rails 的 Ajax 弹出框

javascript - 如何级联启动多个 gif?

javascript - 更改运行php代码的链接的值