我试图强制文本只能在两个文本字段之一中输入。
当一个字段失去焦点时,我检查它的值,如果它不为空,我禁用另一个文本字段。
以下是一个例子:
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/中解释的问题
答案 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));
});