【问题标题】:Error message not showing and hiding depending on if else statement错误消息不显示和隐藏取决于 if else 语句
【发布时间】:2017-10-16 04:34:52
【问题描述】:

我有一个函数循环遍历表单的所有输入并检查它们是否已填写。如果该字段为空白,则该特定输入变为粉红色并返回 false。

我正在尝试在未填写的输入下方添加“必填字段”消息。所以我在每行之后编写了一个额外的表格行,其中包含一个包含错误消息的 div。 div 的 css 在页面加载时设置为“display:none”。

现在我的函数对每个输入都显示为“必需”,而不仅仅是空白输入,而且粉红色仍然正常工作。

如何让“必需”的 div 像粉红色一样正确显示和隐藏?

checkinputs = function (blockOne,blockTwo) {
inputGood = true;
blOne = $(blockOne);
blTwo = $(blockTwo);
blInput = [blOne,blTwo];
for (x = 0; x < 2; x++) {
        var validators = blInput[x].find(" [id$='RequiredIndicator']").parent().parent('tr').find(':input:not(:hidden)');
        var notAllFilled = validators.filter(function(){
        var myInput = $(this); //.parent().parent('tr').find(':input');
        var filledVal = myInput.val();
        var isFilled = $.trim(filledVal).length;
            if (isFilled) {
                $(this).css('background-color', 'white');

                $(this).closest('div').find('.required').hide();

                $(this).parent('td').prev('td').find('span').text('*'); 
                }
            else {
            $(this).css('background-color', 'pink');

            $(this).closest('div').find('.required').show();

             $(this).parent('td').prev('td').find('span').text('*');            
            inputGood = false;  
            }
        return isFilled;
        }).length;
    var inputCount = validators.length;
};
    if( !inputGood ){
        $('#errorAlert').append('<span style="font-weight:bold;">"Some required    information is missing. Please complete the missing fields below."</span>' + '<br><br>');
        $('#errorAlertTwo').append('<span style="font-weight:bold;">"Some required credit card information is missing. Please complete the missing fields below."</span>' + '<br><br>');    
    }
    return inputGood;   
};

这里有一个问题: http://jsfiddle.net/RNMM7/

【问题讨论】:

  • 请显示你的html标记,同时显示完整的js代码,$(this)指的是什么?
  • 如果你能做个小提琴就更好了!
  • 这段 javascript 代码没有 HTML 就毫无意义。也发布您的 HTML
  • 对不起,添加了一个问题!
  • 该死,我的 Fiddle 没有像它应该的那样触发函数。

标签: javascript jquery forms html-table show-hide


【解决方案1】:

您的问题几乎肯定是您显示 div 的行:

$(this).closest('div').find('.required').show();

这一行的作用是:

  1. 从您的 $(this) 开始,它会找到最近的祖先 [包括 $(this)],它是一个 div,沿着 DOM 树向上移动
  2. 在该 div 下查找所有具有“必需”类的元素,并显示它们。

在没有看到您的 HTML 结构的情况下,我的猜测是 DOM 树上最近的 div 元素包含您所有的 .required 元素。您需要将该语句中的“div”替换为 DOM 树中较低的元素,该元素仅包含您的 $(this) 和您要显示的一个 .required 元素。

【讨论】:

  • 这很有意义,我认为这可能是问题所在。我添加了一段代码,以便您查看 html 的结构
  • 看起来小提琴的工作并不完全正确 - 最简单的方法可能是将 .field_holder 之类的类添加到具有标签、输入和 div 的 td 元素中,然后使用$(this).closest('.field_holder').find('.required').show();
  • 不幸的是,所需的 div 与输入不在同一个 td 中。每个必需的标签都在下一行,三个 td 结束了。我将如何定位?
  • 找到输入字段的第一个公共父级和放置新类的 div。(我认为这恰好也是一个 td 元素,但我可能读错了)。
猜你喜欢
  • 2017-02-05
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多