1

ここで少し問題が発生しました。ゲストブック用のフォームがあり、各入力が検証されて空になるため、エラー メッセージが表示されます。以下に示すように、フェードアウトする前に、エラーメッセージが2秒間遅れるようにjqueryセクションを調整しました。

$(document).ready(function(){

var working = false;

$('#addCommentForm').submit(function(e){

    e.preventDefault();
    if(working) return false;

    working = true;
    $('#submit').val('Working..');
    $('.error').remove();

    $.post('submit.php',$(this).serialize(),function(msg){

        working = false;
        $('#submit').val('Submit');

        if(msg.status){

            $(msg.html).hide().insertAfter('#new').slideDown();
            $('#body').val('');
        }


        else {
            /* This is the section im stuck with */
            $.each(msg.errors,function(k,v){
                $('[for='+k+']').append('<div class="error">'+v+'</div>').delay(2000).fadeOut();
            });

        }

    },'json');

});

});

ただし、エラー メッセージが消えた後、ラベルも消えます。コードのこの部分に関係があると感じています:

'[for='+k+']'

ラベルではなくエラーメッセージだけがフェードアウトするように、これを回避する方法はありますか?

私からさらにコードが必要な場合は、お知らせください。

4

1 に答える 1

1

あなたが正しい :

$('[for='+k+']').append('<div class="error">'+v+'</div>').delay(2000).fadeOut();

要素を追加し、待機し、[for=...] が選択されている要素をフェードアウトすることを意味します。

解決策は使用することができますappendTo()

$('<div class="error">'+v+'</div>').appendTo('[for='+k+']').delay(2000).fadeOut();
于 2012-04-29T16:38:01.127 に答える