1

そこで、PHP と jQuery を使用してこのフォーム バリデータを作成しています。PHP コードはフォームをチェックし、エラーを含むフィールドを含む配列を返します。例: {"メール":1,"パスワード":1}

しかし、今、エラーが見つからないかどうかについて懸念があります。ここでの問題は、ページのリダイレクトを防ぐために、コードの最後に「return false」を含めたことです。これは悪いコード プラクティスであると読みましたが、意図したとおりに機能する別の方法は見つかりませんでした。

2 番目の問題は、o-array を $('input').each 関数に渡す方法です。現在、何も渡されていないため、すべてのフォームが有効であると表示されます。$.ajax の代わりに $.post を使用すると、何らかの理由でこのスコープの問題は発生しません。

jQuery:

$(function() {

    $('#register').submit(function() {
        var url = $(this).attr('action');
        var data = $(this).serialize();

        $.ajax({
            type: 'GET',
            url: url,
            data: data,
            success: function(o) {
                console.log(o);
                $('input').each(function() {
                    var msgId = o[$(this).attr('name')];
                    console.log(o[$(this).attr('name')]);

                    if (msgId > 0) {
                        $('#listError').css('visibility', 'visible');
                        $('#listError').append('<li>' + $(this).nextAll('span.msg').eq(msgId - 1).text() + '</li>');
                        $(this).addClass('invalid');
                    } else if (msgId != 0) {
                        $(this).addClass('valid');
                    }
                    $('#listError').append('</ul>');
                })
            }
        }, 'json');

        return false;
    });

});
4

2 に答える 2

0

拳、本当にやりたくないのになぜフォームを提出するのですか?!代わりにボタンを使用して、クリックハンドラーからAJAXリクエストを作成してください。

$('#registerButton').click(function() {
    var form = $('#register')

    var data = form.serialize();

    $.ajax(...);
});

「2番目の問題は、o-arrayを$('input')。eachに渡す方法です。」

ここでの問題は何ですか?each()内部成功コールバックがある場合は、そのeach()でdataコールバック(またはあなたの場合)に渡されるパラメーターを使用できます。o

于 2013-02-19T20:56:31.563 に答える
-1

これを試して

$(function() {

    $('#submit_button_id').click(function() {
        var url = $(this).attr('action');
        var data = $(this).serialize();
        var ret = true;
        $.ajax({
            type: 'GET',
            url: url,
            async: false,
            data: data,
            success: function(o) {
                console.log(o);
                $('input').each(function() {
                    var msgId = o[$(this).attr('name')];
                    console.log(o[$(this).attr('name')]);

                    if (msgId > 0) 
                        ret = false;
                        $('#listError').css('visibility', 'visible');
                        $('#listError').append('<li>' + $(this).nextAll('span.msg').eq(msgId - 1).text() + '</li>');
                        $(this).addClass('invalid');
                    } else if (msgId != 0) {
                        $(this).addClass('valid');
                    }
                    $('#listError').append('</ul>');
                })
            }
        }, 'json');

        if(ret==true){
            $('#register').submit();
        }
    });

});
于 2013-02-19T20:38:28.547 に答える