【问题标题】:jQuery form validation using each() not working as expected使用 each() 的 jQuery 表单验证无法按预期工作
【发布时间】:2014-04-14 04:33:48
【问题描述】:

我正在尝试创建自己的简单表单验证,同时使用 each() 循环遍历所有具有类 '.required' 的表单元素。

问题是,它不断跳出循环并且总是跳到'return true;'即使所有字段都是空的。

这是html:

<input type="text" id="personal-name" name="personal-name" class="required-field" placeholder="First Name">

这是 jQuery 代码:

function validForm() {

    var privacyApprove = $('#privacy-approved');
    var errorWindow = $('.errors');

    // Fade out the error after 3 seconds
    var errorFadeOut = setInterval(function () {
        errorWindow.fadeOut();
        clearInterval(errorFadeOut);
    }, 3000);

    if (!privacyApprove.is(':checked')) {
        errorWindow.fadeIn().text("יש להסכים לתנאי התקנון");
        return false;
    }

    $('input.required-field, textarea.required-field').each(function() {
            if ($(this).val() == 0) {
                errorWindow.fadeIn().text("אנא השלם את כל הפרטים הנדרשים המודגשים באדום");
                $(this).addClass('input-error');
            } else {
                $(this).removeClass('input-error');
            }
    });

    return true;
}

我做错了什么??

谢谢! :)

【问题讨论】:

    标签: jquery forms validation each


    【解决方案1】:

    看来你想做

    if ($(this).val() == '')
    

    而不是

    if ($(this).val() == 0)
    

    一个有效的替代方案是

    if ($(this).val().length == 0)
    

    另外,您应该避免总是返回true。将您的返回值更改为此

    return $('.input-error').length == 0
    

    【讨论】:

    • 谢谢,这将是更有效的语法,但仍然不能解决问题,似乎 each() 正在打破循环,即使他找到了一个空字段并直接跳转到'回报:真;'声明。
    • @Pro5per:循环最终将完成并执行下一条指令,在本例中为return true。如果你想避免这种情况,你需要添加一些条件来根据无效计数返回真或假。
    • 非常感谢更新的答案,我最终使用了你的答案,因为它要短得多。谢谢:)
    【解决方案2】:

    如果代码获取了 each 块,它将始终返回 true。您没有任何会返回 false 的逻辑。

    可以在每个之后添加类似的内容

    if ($('input-error'))
      return false
    else
      return true
    

    【讨论】:

    • 解决了!非常感谢!我使用了 $('input, textarea').hasClass('input-error')。感谢您的启发:)
    • 很高兴为您提供帮助。你能用我的回答标记回答的问题吗?谢谢
    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    相关资源
    最近更新 更多