IE吃掉我的焦点'事件

时间:2014-07-28 09:02:48

标签: javascript jquery html internet-explorer javascript-events

我有一个必须在IE 7/8(compat)中运行的应用程序。 (我知道,对吧?)

该应用包含以下功能....

如果单击下拉列表,列表会在其他位置检查某些值,并根据找到的匹配数启用或禁用某些选项。我使用下拉列表的焦点事件来实现这一点。

如果我在真实的浏览器中运行此代码,它可以正常工作。如果我在启用兼容模式的IE7或8中运行它,我必须单击DDL两次;第一次触发我的焦点事件代码,第二次触发它以使其下拉。

标记:

<!DOCTYPE html>
  <html>
    <head>
      <script data-require="jquery@*" data-semver="2.1.1" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    </head>

    <body>
      <select id="aa">
        <option>A</option>
        <option>B</option>
        <option>C</option>
        <option>D</option>
        <option>E</option>
        <option>F</option>
        <option>G</option>
      </select>

      <script src="script.js"></script>
    </body>
  </html>

JS:

$("#aa").focus(function() {
  var countSelectedEvents = 2;
  var kids = $("#aa").children("option");
  kids.removeAttr("disabled");
  kids.removeAttr("title");

  if (countSelectedEvents == 0) {
    kids.slice(1).attr("disabled", "disabled");
    kids.slice(1).attr("title", "This option is only available if one or more Events are selected");
    kids.slice(4).attr("title", "This option is only available if exactly ONE Event is selected");
  } else if (countSelectedEvents > 1) {
    kids.slice(4).attr("disabled", "disabled");
    kids.slice(4).attr("title", "This option is only available if exactly ONE Event is selected");
  }
  return true;
});

为方便起见,您可以在plnkr上找到此代码。如果有人知道如何让DDL在第一次点击时打开,我很乐意听到它。

更新 StackOverflow上的This question建议触发'focusout'事件,但这也不起作用。

更新II 看来这是一个更通用的IE错误。它在IE11的本机mod中也不起作用! : - (

1 个答案:

答案 0 :(得分:0)

{功能事件中有一个额外的左括号.focus()。这可能会破坏你的代码。

而不是.focus(function(){{}),应该是.focus(function(){})

(换句话说,删除JS示例中的第2行并应设置)