1

实际上,我正在验证一个包含文本、选择、下拉等字段的表单。我有一些必填字段,我给了他们一个必需的类(只有文本字段)。现在我想遍历所有表单元素并检查该元素是否需要一个类,然后在该字段后附加一个 *。我使用了 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元素。任何人都可以帮助我如何验证此表格。谢谢

4

3 回答 3

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;
}

希望这可以帮助。干杯。

于 2011-05-07T14:09:55.257 回答
0

您可以.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并不像您期望的那样工作。如果您false.each函数返回,它将简单地停止迭代。
  • $("form :text.required:text") 将匹配所有具有 class 的文本字段.required,而不仅仅是一个,正如您所期望的那样。
于 2011-05-07T11:20:12.327 回答
0

这就是我解决问题的方法

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

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

于 2016-11-30T14:39:08.000 回答