在每个输入之间迭代以验证值

时间:2012-11-16 12:55:17

标签: jquery forms validation each preventdefault

我有这个代码,如果为空则验证输入的值,并使用twitter bootstrap popover显示消息错误:

$(document).on("ready", login_events());

function login_events(){

    $("#userId, #password").on("change", validateEmpty);
    $("#loginButton").on("click", validateAll);

}

function validateEmpty(){

    input = $(this);
    input.popover({animation: true, placement: 'right', trigger: 'manual', title: 'Field is Empty', content: input.attr("data-empty-message")});
    isValid = true;

    if(input.val() === ""){
        input.popover('show');
        isValid =  false;
    }
    else{
        input.popover('hide');
    }

    return isValid;

}

这在改变事件完成时非常有效,但我想做另一个函数,它将在表单中的每个输入之间进行迭代,验证它是否为空(validateEmpty())和preventDefault(如果有的话)为空。

正如你所看到的,我为#loginButton设置了click事件设置来运行validateAll函数,我有类似的东西,但无法找到正确的方法:

function validateAll(event){

    $("#loginForm input").each(validateEmpty);

}

2 个答案:

答案 0 :(得分:1)

试试这个闭包:

function validateAll(event){
    var isValid = true;
    $("#loginForm input").each(function (){
        input = $(this);
        input.popover({animation: true, placement: 'right', trigger: 'manual', title: 'Field is Empty', content: input.attr("data-empty-message")});
        isValid = true;

        if(input.val() === ""){
            input.popover('show');
            if (isValid)
                isValid = false;
        }
    });
    if (!isValid) {
        alert('form is not valid!');
    }
}

答案 1 :(得分:0)

谢谢@VMAtm!我替换了each()中的函数来运行我已经创建的validateEmpty函数。它现在很棒!

function validateAll(event){

  isValid = true;

  $("#loginForm input").each(validateEmpty);

  if(!isValid){
    event.preventDefault(); 
  }
}