【问题标题】:Highlight empty select box after alert警报后突出显示空选择框
【发布时间】:2013-12-15 04:17:59
【问题描述】:

我有一个使用 input:text 的网站,选择并选择多个在按钮单击时生成文本输出的元素。

Having searched SO, I found examples of validation code that will alert the user when a select field returns an empty value-

// alert if a select box selection is not made
    var selectEls = document.querySelectorAll('select'),
        numSelects = selectEls.length;

    for(var x=0;x<numSelects;x++) {
        if (selectEls[x].value === '') {
            alert('One or more required fields does not have a choice selected... please check your form');
            return false;
            $(this).addClass("highlight");

        }

最后,我尝试在解除警报后添加一个条件,这样有问题的选择框将通过添加“highlight”类突出显示 - 但这没有任何作用。我的 .highlight css 是 {border: 1px red solid;}

这里有什么帮助吗?

已更新答案 - 谢谢@Adam Rackis

此代码完美运行。我添加了一行来删除任何添加的“.highlight”类,用于修复后未导致错误的选择

// alert if a select box selection is not made
    var selectEls = document.querySelectorAll('select'),
    numSelects = selectEls.length;
    $('select').removeClass("highlight");//added this to clear formatting when fixed after alert
    var anyInvalid = false;
    for(var x=0;x<numSelects;x++) {
        if (selectEls[x].value === '') {
            $(selectEls[x]).addClass("highlight");
            anyInvalid = true;
        }}
        if (anyInvalid) {
            alert('One or more required fields does not have a choice selected... please check your form');
            return false;
        }

【问题讨论】:

  • 您在 addClass 之前返回。将return false; 放在$(this).addClass("highlight"); 之后,顺便说一句,this 在这里是什么意思?

标签: javascript jquery forms validation alert


【解决方案1】:

你很亲密。在您的循环中,this 并不引用您正在检查的每个选择。

此外,您在添加突出显示类之前返回 false。您可能需要跟踪是否有任何选择无效,并在完成所有验证后在最后返回 false。

最后,考虑将提醒移动到最底部,这样您的用户就不会看到多个提醒。

var anyInvalid = false;
for(var x=0;x<numSelects;x++) {
    if (selectEls[x].value === '') {
        $(selectEls[x]).addClass("highlight");
        anyInvalid = true;
    }
}
if (anyInvalid) {
    alert('One or more required fields does not have a choice selected... please check your form');
    return false;
}

另外,既然您已经在使用 jQuery,何不进一步利用它的功能:

$('select').each(function(i, sel){
    if (sel.value === '') {
        $(el).addClass("highlight");
        anyInvalid = true;
    }
});
if (anyInvalid) {
    alert('One or more required fields does not have a choice selected... please check your form');
    return false;
}

【讨论】:

  • 谢谢,我认为这几乎对我有用:我使用了最重要的建议,但我认为 'for' 表达式缺少结束 '}'。我将它添加到代码的末尾。另外,我突出显示了有问题的选择框,但首先没有警报框?任何想法为什么?
  • @user1837608 - 没错 - 警报应该最后显示。它应该首先突出显示所有错误选择,然后显示 one 警报。在您只是突出显示第一个错误选择然后返回之前。我建议您在失败之前进行所有验证,以便您的用户可以预先看到所有错误。
  • 知道了。您的代码运行良好 - 我没有意识到在之前的代码尝试显示多个警报后我关闭了所有警报。
  • 我注意到当我在 IE8 中尝试代码时出现 javascript '对象不支持此属性或方法' 错误?然而,IE8 应该支持 queryselectorALL 吗?你知道为什么会这样吗?
  • @user1837608 - 看看这里:stackoverflow.com/questions/16920365/…
猜你喜欢
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 2015-06-11
  • 2012-12-15
  • 2015-12-12
  • 2015-08-08
相关资源
最近更新 更多