0

jQuery 検証プラグインを使用してこのフォームを検証しようとしていますが、エラーが見つかっても JavaScript コードを停止しないため、フォームが DB に送信されてからエラーが表示されます。これらのイベントを適切に連鎖させるにはどうすればよいですか?

$("#salvar-cur").live("click", function () {
    var validator = $("#frm_curriculo").validate({
        rules: {
            cur_nome: {
                required: true
            }
            //other options
        },
        messages: {
            cur_nome: {
                required: "*"
            }
            //other options
        }
    });
    if (validator.numberOfInvalids() == 0) {
        alert("Success!")
        var params = $("#frm_curriculo").serialize();
        $.ajax({
            type: "POST",
            url: "controller/ctrl_curriculo.php",
            data: "acao=inserir&" + params,
            dataType: "html",
            contentType: "application/x-www-form-urlencoded",
            success: function () {
                $("#frm_curriculo")[0].reset();
            }
        });
    }
});
4

1 に答える 1

1

まず、クリックするたびにバリデーターを再追加しています。これは、イベント ハンドラーの外で実際に行う必要があります。

また、 をチェックする代わりに、 をチェックvalidator.numberOfInvalids()してみてください。これによりフォームが検証され、または$("#frm_curriculo").valid()が返されます。truefalse

別の注意点として#salvar-cur、送信ボタンの場合は、デフォルトのアクションを防止する必要があります。

$(function(){
    $("#frm_curriculo").validate({
        rules: {
            cur_nome: {
                required: true
            }
            //other options
        },
        messages: {
            cur_nome: {
                required: "*"
            }
            //other options
        }
    });
});

$("#salvar-cur").live("click", function (e) {
    e.preventDefault();
    if ($("#frm_curriculo").valid()) {
        alert("Success!")
        var params = $("#frm_curriculo").serialize();
        $.ajax({
            type: "POST",
            url: "controller/ctrl_curriculo.php",
            data: "acao=inserir&" + params,
            dataType: "html",
            contentType: "application/x-www-form-urlencoded",
            success: function () {
                $("#frm_curriculo")[0].reset();
            }
        });
    }
});
于 2012-07-31T18:56:19.203 に答える