1

入力があるフォームがあります。入力の回答と可視性は、その下にある他の入力の可視性に影響を与える場合があります。

一部の入力の値が変更されたときに呼び出される JavaScript 関数があります。関数はすべての入力を通過し、その可視性と答えをチェックします。その情報に基づいて、他の入力を非表示または表示する場合があります。要素の可視性は前の要素の可視性に影響を与えることができないため、1 回のループで十分です。

$(".test_this").each(function() {
    var id_number = $(this).attr("id").split("_")[1];
    var tested_id = parseInt(id_number) + 1;
    if ($(this).find("input:checked").val() != 1 || $(this).is(":hidden")) {
        if ($("#element_"+tested_id).is(":visible")) {
            $("#element_"+tested_id).hide();
        }
    }
    else {
        if ($("#element_"+tested_id).is(":hidden")) {
            $("#element_"+tested_id).show(500);   
        }                     
    }                  
});

私のコードはうまく機能していますが、非表示機能に期間を追加したいのですが、可視性チェックが失敗します。一部の要素が非表示になり始めたが、まだ表示されているかどうかを知ることは可能ですか?

遅延後に実行されるため、コールバック関数を使用したくありません。次に、非表示の入力の値を変更したくありません。1つの解決策は、存在を確認できるクラスを追加することですが、これを行うためのより良い方法はありますか?

フィドルの私のコード: http://jsfiddle.net/nmUPj/3/

詳細については、私の実際のコードはもっと複雑で、MySQL からフォームに関する情報を取得し、PHP でフォームと JavaScript コードを生成しています。

4

1 に答える 1

1

要素がまだアニメーション化されているかどうかは、次の方法で確認できます。

$("#element_"+tested_id).is(":animated")

または、show()にコールバック関数を指定することもできます。

$("#element_"+tested_id).show(5000, function(){
    alert('animation completed');
});
于 2012-12-09T12:22:07.853 に答える