【问题标题】:Loop through Form Elements with Specefic Class循环遍历具有特定类的表单元素
【发布时间】:2011-08-20 17:02:59
【问题描述】:

实际上,我正在验证一个包含文本、选择、下拉等字段的表单。我有一些必填字段,我给了他们一个必需的类(只有文本字段)。现在我想遍历所有表单元素并检查该元素是否需要一个类,然后在该字段后附加一个 *。我使用了 each() 方法,但我没有让它完全按照我想要的方式工作。

我的代码如下所示:

function validate_form() {
    $("#mysubmit").each(function() {
        if($("form :text.required:text").val() == "" )
        {
            $("form :text.required:text").html("*");
            return false;
        }
        return true;
    });
}

其中 mysubmit 是我的提交按钮的 ID。

我想一一遍历DOM元素。任何人都可以帮助我如何验证此表格。 谢谢

【问题讨论】:

    标签: jquery forms jquery-selectors validation this-keyword


    【解决方案1】:

    正如你所说,你想追加'*'。您试图将其插入 内部

    我们将使用class="validation" 创建一个跨度这样做:

    function validate_form() {
        var valid = true;
        $('form .required:text').each(function(){
           var $spanVal = $(this).next(); //Try to get the validation message (who has '*')
           if ($(this).val()!="" && $spanVal.is("span.validation")){ //If text has value
               $spanVal.remove(); //remove the asterisk
           }else if($(this).val()==""){ //If text is empty           
               if(!$spanVal.is("span.validation")){ //Create a validation message if it doesn't exist
                  $('<span class="validation">*</span>').insertAfter(this);
               }
               valid = false;
           } 
        });
        return valid;
    }
    

    希望这会有所帮助。干杯。

    【讨论】:

    • 我添加了一点来验证空格,但它不验证空格。我在哪里错了: else if($(this).val()=="" || $(this).val().replace(/\s/g, '').length == 0) 和感谢您的回答
    【解决方案2】:

    您可以使用.after 在所需元素后附加 *,如下所示:

    $('.required').after('<span>*</span>');
    

    要遍历所有必填字段,您可以这样做:

    $(.required).each(function(){
        //do something with this
        //inside this function 'this' is in turn each of the selected elements
        alert($(this).val());
    });
    

    jQuery.each 迭代它所应用的选择中的所有元素。在您的情况下,$("#mysubmit") 只是一个元素(我假设是提交按钮)。没有必要。
    这是您的代码的重写版本:

    function validate_form() {
        var valid = true;
        $('form .required').each(function(){
           if ($(this).val()==''){
             $(this).after('<span>*</span>');
             valid = false;
           }
        });
        return valid;
    }
    

    注意事项:

    • 不需要$("#mysubmit").each,因为函数内部的逻辑不依赖于提交按钮
    • .each 函数返回一个值,就像您尝试的那样,并没有像您预期的那样工作。如果您从 .each 函数返回 false,它将简单地停止迭代。
    • $("form :text.required:text") 将匹配 所有 具有 .required 类的文本字段,而不仅仅是一个,正如您所期望的那样。

    【讨论】:

      【解决方案3】:

      这就是我在没有的情况下解决问题的方法

      在 if 语句中删除警报并附加 * :) 认为它应该可以工作

      https://stackoverflow.com/a/40891000/5185974

      【讨论】:

      • 始终欢迎提供潜在解决方案的链接,但请add context around the link,以便您的其他用户知道它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。考虑到仅仅是指向外部站点的链接Why and how are some answers deleted? 的一个可能原因。
      猜你喜欢
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多