IE11并不想专注于'disabled`元素

时间:2016-04-28 23:53:00

标签: javascript jquery html internet-explorer-11

我试图强制文本只能在两个文本字段之一中输入。

当一个字段失去焦点时,我检查它的值,如果它不为空,我禁用另一个文本字段。

以下是一个例子:

HTML:

<div class="container">
  <label for="textOne">textOne</label>
  <input type="text" id="textOne"/>
</div>
<div class="conatiner">
  <label for="textTwo">textTwo</label>
  <input type="text" id="textTwo"/>
</div>

jQuery的:

$("#textOne").on('focusout', function() {
  console.log("focusout::\t"+this.id);
  if( $("#textOne").val() == "") {
    $("#textTwo").prop('disabled', false);
  } else {
    $("#textTwo").prop('disabled', true);
  }
});

$("#textTwo").on('focusout', function() {
  console.log("focusout::\t"+this.id);
  if( $("#textTwo").val() == "") {
    $("#textOne").prop('disabled', false);
  } else {
    $("#textOne").prop('disabled', true);
  }
});

这在Chrome和Firefox中运行良好,但似乎IE11不支持focus元素上的disabled

我找到的唯一解决方案是this question,即使用readonly属性,而不是disabled属性。对于我的应用来说,这不是一个理想的解决方案。

有没有办法在IE11中实现这一点,同时仍使用disabled属性?

IE11在focus属性上不支持disabled的原因是什么?

提前感谢任何建议和答案。

编辑:这里有一个关于jsFiddle的例子,当在IE11上运行时会重现帖子https://jsfiddle.net/ftqbop7a/2/中解释的问题

1 个答案:

答案 0 :(得分:2)

这样简单,而不是focusout使用input事件:

$("#textOne").on('input', function() {
    if( $.trim($("this").val()) == "") {
    $("#textTwo").prop('disabled', false);
  } else {
    $("#textTwo").prop('disabled', true);
  }
});

$("#textTwo").on('input', function() {
    if( $("#textTwo").val() == "") {
    $("#textOne").prop('disabled', false);
  } else {
    $("#textOne").prop('disabled', true);
  }
});

<强> jsFiddle

解释一下:关注焦点对于IE获取最后一个操作输入元素的引用来说为时已晚,而(on)input事件将会立即发生。

想要将你的代码简化为老板吗? 的 jsFiddle

var $inp = $("#textOne, #textTwo");
$inp.on("input", function() {
   $inp.not(this).prop("disabled", $.trim(this.value));
});