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;
       }
   });
}

我编写了这个函数来验证我在一个函数中的所有输入,但它不会在任何时候返回 true 。如果我填写所有输入,它会再次返回 false。任何人都可以帮助我吗?

4

2 回答 2

1

您的Validate函数不返回任何内容。return从该函数内部没有语句这一事实可以看出这一点。它所做的只是blur在传递给它的元素上绑定一个事件处理程序;该事件的处理函数返回trueor false,但这与函数完全无关Validate

我怀疑return函数内部的缺失会隐含地导致undefined返回,而这反过来又会评估false为布尔条件,这就是为什么你永远不会看到true(因为它永远不会看到)。只需在您的函数中取出事件处理程序绑定Validate

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 回答