【问题标题】:Validate Form Element in one function in jquery在 jquery 的一个函数中验证表单元素
【发布时间】:2013-03-22 09:54:13
【问题描述】:
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。谁能帮帮我?

【问题讨论】:

    标签: jquery forms function element validating


    【解决方案1】:

    您的Validate 函数不返回任何内容。从该函数内部没有 return 语句这一事实可以看出这一点。它所做的只是在传递给它的元素上绑定blur 事件处理程序;该事件的处理函数返回truefalse,但这与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");
    }
    

    【讨论】:

    • 如果我这样写,如何捕捉元素的“模糊”功能?
    • @Onur 如果您附加到blur 事件处理程序,请单独设置(不在Validate 方法内)并简单地检查input_error 内部是否存在类Validate 方法代替(如果该类存在则失败)。
    • 这行得通,但它有一个错误。如果我不填写任何内容,它会返回 True,因为任何元素都有类 input_error :((
    • @Onur 编辑为在提交表单时以编程方式在三个输入上触发blur 事件,因此它会选择其中一些根本没有交互的情况。
    • 谢谢你,Anthony 我想问你一些别的事情。我有一个电子邮件输入。我将如何使用这些代码测试电子邮件是否真实?
    【解决方案2】:

    $("#client_name").val();代替这个$("#client_name")

    替换

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

    if (id.val() == "") {
    

    【讨论】:

    • 但我已经在函数 id.val() 中说了。这跟Devang有什么区别吗?
    • 哦,我没看到。好的,没有问题,但现在检查我编辑的答案。
    猜你喜欢
    • 2018-01-25
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多