0

正常に機能しているフォームを検証していますが、すべての検証後にフォームが送信されない理由がわかりません。

検証コードは次のとおりです。

$('#coupon_options').submit(function(e){
    e.preventDefault();

    var name = $('input[name="coupon_name"]'), 
        code = $('input[name="coupon_code"]'), 
        value = $('input[name="coupon_value"]'), 
        valid = $('input[name="coupon_valid"]'), 
        status = true;

    if( $.trim(name.val()) == "" ){
        name.css('border-color', '#ff0000');
        status = false;
    } else { name.removeAttr('style'); }

    if( $.trim(code.val()) == "" ){
        code.css('border-color', '#ff0000');
        status = false;
    } else { code.removeAttr('style'); }

    if( $.trim(value.val()) == "" ){
        value.css('border-color', '#ff0000');
        status = false;
    } else { value.removeAttr('style'); }

    if( $.trim(valid.val()) == "" ){
        valid.css('border-color', '#ff0000');
        status = false;
    } else { valid.removeAttr('style'); }

    if( status == true ){ return status; } 
    else { return false; }

});

送信イベントの後に更新を停止することを知っているので、使用しましたreturn falseが、ここで true が機能するかどうかわかりませんか?

私は Ajax を使用したくありません。検証後に送信したいだけです。このコードに何か問題がありますか??

4

2 に答える 2

1

削除する:

 e.preventDefault();

あなたもデフォルトのアクションが発生するのを止めますreturn true;

例えば:

  • 送信ボタンでフォームを送信できないようにする
  • リンクが URL をたどらないようにする
于 2013-09-05T05:12:33.857 に答える
1

e.preventDefault();が問題ですが、基本的に異なる要素に対して同じアクションを実行する複数の関数がある場合、これは決して良い兆候ではないことに注意してください。コードを次のように単純化できます。

$('#coupon_options').submit(function(e){
    var status = true;
    $('input[name="coupon_name"],input[name="coupon_code"],input[name="coupon_value"],input[name="coupon_valid"]').each(function(){
        if($.trim($(this).val()) == ""){
            $(this).css('border-color', '#ff0000');
            status = false;
        } else {
            $(this).removeAttr('style'); 
        }
    });
    return status;
});

$('input[name^="coupon_"]')また、そのプレフィックスで始まるすべての入力を選択するために使用することもできます。

于 2013-09-05T05:29:06.153 に答える