0
var client_name     = $("#client_name");
var client_surname  = $("#client_surname");
var client_phone    = $("#client_phone");
var form            = $("#billing_form");

Validate(client_name);
Validate(client_surname);
Validate(client_phone);

form.submit(function(e){
  if(Validate(client_name) && Validate(client_surname) && Validate(client_phone)){
     e.preventDefault();
     console.log("True");
     return true;
 } else {
     console.log("False");
     return false;  
 }
});

function Validate(id){
 id.blur(function(){
  if(id.val().length <= 0){
     id.addClass("input_error").removeClass("input_apply").css("border","1px solid #ff0000");
     return false;
} else {
     id.removeClass("input_error").removeAttr("style");
     return true;
       }
   });
}

すべての入力を 1 つの関数で検証するためにこの関数を作成しましたが、常に true を返すことはありませんすべての入力を入力すると、再び false が返されます。誰でも私を助けることができますか?

4

2 に答える 2

1

あなたのValidate関数は何も返しません。returnこれは、その関数内にステートメントがないという事実から明らかです。blur渡された要素にイベント ハンドラーをバインドするだけです。そのイベントのハンドラー関数はtrueorfalseを返しますが、関数にはまったく関係ありませんValidate

関数の内部に欠けているとreturn、暗黙的に返される結果になると思われます。これは、ブール条件に対してundefined評価されます。これが、表示されない理由です(決して表示されないため)。関数内のイベント ハンドラー バインディングを取り出すだけです。falsetrueValidate

function Validate(id) {
    if (id.val().length <= 0) {
        id.addClass("input_error").removeClass("input_apply").css("border", "1px solid #ff0000");
        return false;
    } else {
        id.removeClass("input_error").removeAttr("style");
        return true;
    }
}

入力値を変更しているため、検証は行われませんが、フォームを送信すると正しく検証されるはずです。

イベント ハンドラーを保持したい場合は、次のblur方法で実行できます。

var client_name     = $("#client_name");
var client_surname  = $("#client_surname");
var client_phone    = $("#client_phone");
var form            = $("#billing_form");

function blurValidation() {
    var $this = $(this);
    if(this.value.length <= 0) {
        $this.addClass("input_error").removeClass("input_apply").css("border","1px solid #ff0000");
        return false;
    }
    else {
        $this.removeClass("input_error").removeAttr("style");
        return true;
    }
}

client_name.blur(blurValidation);
client_surname.blur(blurValidation);
client_phone.blur(blurValidation);


form.submit(function(e){
    client_name.blur();
    client_surname.blur();
    client_phone.blur();
    if(Validate(client_name) && Validate(client_surname) && Validate(client_phone)){
        e.preventDefault();
        console.log("True");
        return true;
    } else {
        console.log("False");
        return false;  
    }
});

function Validate(id){
    return !id.hasClass("input_error");
}
于 2013-03-22T10:03:17.427 に答える
0

$("#client_name")この使用の代わりに$("#client_name").val();

交換

if (id.val().length <= 0) {

if (id.val() == "") {
于 2013-03-22T09:56:11.830 に答える