6 に答える
Disabled
入力はトリガーされず、FireFoxでイベントが発生しますchange
。click
$('li:eq(1)').click(function(e){
if($.trim($('#input1').val()).length != 0){
$('#input2').prop('disabled', false);
}
});
代わりに、クロスブラウザであるtrim()
jQuery関数を使用できます。$.trim()
$('#input1').change(function(){
if($.trim($(this).val()).length != 0){
$('#input2').prop('disabled', false);
}
});
あなたのコードは大丈夫です。問題は、.change()がトリガーされる前にフォーカスを失う(ぼかし)必要があることです。.keyup()に変更してみてください
追加:これはおそらくあなたが望んでいた効果です
$('#input1').keyup(function(){
$('#input2').prop('disabled', $(this).val().trim().length == 0);
});
この投稿Jquery event on a disabled inputの @Andy E の回答を参照してください。問題を解決するための最良の解決策だと思います。
これは、FF では、入力が無効になると、実際には無効になるためです (マウス クリックを受信しません)。
無効な要素をクリックしても、input1 でぼかしイベント (フォーカスが失われる) は生成されないため、onchange は発生しません。
一部のクラスと jQuery を使用すると、これを簡単に回避できます。例えば:
<input class=disabled id=input2>
いくつかのCSS:
.disabled { background: #888; }
その後...
$(function(){
// disable keypresses on "disabled" input
$('.disabled').keypress(function(e){
e.preventDefault;
e.stopPropagation;
return false;
});
// doesn't allow to focus
$('.disabled').focus(function(e){
$(this).blur();
});
});
「無効」要素を有効にするには:
$('#input2').removeClass('disabled');
ここで確認してください:http://jsfiddle.net/SVtDj/11/
ラミソンの答えを拡張するには
障害をオンに切り替えたい場合は、次のように#input2
簡単にできます。
$('#input1').change(function(){
var isDisabled = !$.trim($(this).val()).length;
$('#input2').prop('disabled', isDisabled );
});
そしてデモ: http://jsfiddle.net/SVtDj/7/
問題は、Firefox で「enter」と入力するか、何か他のことを行う必要があるため、input1 に書き込んで「onchange」イベントをキャストした後、input1 がフォーカスを失うことです。たぶん、この質問はあなたのものにリンクされているので、Firefoxで動作する次のことを試してみました. (他のブラウザでは試していません)
$('#input1').bind('input',function(){
if($(this).val().trim().length != 0){
$('#input2').removeAttr('disabled');
}
});