if( $("div:last").is(":visible") ) {
$("p").css("color", "red");
}
スクリプトが正しく動作しないのはなぜですか?
if( $("div:last").is(":visible") ) {
$("p").css("color", "red");
}
スクリプトが正しく動作しないのはなぜですか?
スクリプトは、実行時に可視かどうかのみをチェックします。表示されているかどうかはチェックしません。そのため、ユーザーが右矢印キーを使用して表示すると、スクリプトは既に通過しており、赤くならないままです。そのロジックをイベント ハンドラーに移動する必要があります。
これが実用的なフィドルです。私がしたのは、あなたのロジックを切り取って貼り付けただけです。
これで、ユーザーが矢印キーを押すたびに、ボタンが更新され、適切に色が変更されます。
また、参考までに、KnockoutJSにはモデル バインディング用の素晴らしいツールがいくつかあります。スクリプトをほとんど記述しなくても、モデルとビューモデルを相互に自動的に更新できます。矢印キーはビューモデルの値を更新し、ビューに変更を自動的に作成します。調べる価値があり、彼らのチュートリアルはとても楽しいです。
興味がある場合に備えて、Knockout で動作するように変更されたスクリプトの例を次に示します。この例では、コードが少ないわけではありませんが、「例外的なケース」を読んで処理するのが少しきれいだと思います。たとえば、値 2、5、および 7 で赤くしたい場合は、 という 1 つの関数を変更するだけで済みますiAmRed
。