入力に変更イベントハンドラーをアタッチします
最初は次の要素を非表示にしているだけです。また、入力値が変更されるたびに再確認する必要があります。代わりにこれを試してください:
$(function(){
// bind a change event handler
$('#myDiv').change(function(){
this.value.length && $('#next_btn').show() || $('#next_btn').hide();
}).change(); // set initial state
});
if
いずれの場合も単純な1文の処理を行っているため、ステートメントは使用していません。むしろブール式に置き換えました。Javascriptエンジンをブール値で実行すると、jQueryセレクターが1つだけ実行されるため、次のボタン要素をキャッシュする必要もありません。
if
もちろん、そのワンライナーを次のようなものに置き換えることができます。
if (this.value.length)
{
$('#next_btn').show();
}
else
{
$('#next_btn').hide();
}
状態を初期化することを忘れないでください
変更イベントを添付することがすべてではありません。ページが読み込まれるとき(または準備ができているとき)にも初期状態を設定する必要があります。私のコードは、の最後の呼び出しでそれを行い.change()
ます。これは、最初にハンドラーを登録してから、それを呼び出すことを意味します。
超単純化されたソリューション:toggle
ブールパラメータで使用
すべてをこれで置き換えることができます:
$(function(){
// bind a change event handler
$('#myDiv').change(function(){
$('#next_btn').toggle(!!this.value.length);
}).change(); // set initial state
});
変更イベントは大丈夫ですか?
フィールドがフォーカスを失った後に発生するため、変更イベントが要件を満たしているとは限りません。keypress
代わりに、またはkeyup
イベントを使用する必要があります。しかし、ソリューションはそのままです。イベントハンドラバインディングを置き換えるだけです。