【问题标题】:Form input fields is cleared including submit value also清除表单输入字段,包括提交值
【发布时间】:2018-06-06 08:42:45
【问题描述】:

我正在处理表单验证,我想在提交表单后清除字段,但 <input type="submit" value="submit"> 也很清楚,但我只想清除输入字段。我也尝试了reset();,但没有添加reset()。在我的代码字段中被清除了这里我做错了什么。 谁能建议我如何解决这个问题?

提交表单之前

提交表单后

var Validator = function(formObject) {
    this.form = $(formObject);
   var Elements = {
        text: {
            reg: /^[a-zA-Z]{2,20}$/,
            require : true,
            error: "Not a valid name.",
        },

        email: {
            reg: /^[a-z-0-9_+.-]+\@([a-z0-9-]+\.)+[a-z0-9]{2,7}$/i,
            error: "Not a valid e-mail address.",
        },
        phone: {
            reg: /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/,
            error: "Not a valid number.",
        },

        message: {
            reg: /^(?!\s*$).+/,
            error: "Message field cannot be empty.",
        },
        gender: {
          error: "gender is required",
        },
        selectOption: {
          error: "this field is required",
          required: true
      }
    };

    var handleError = function(element, message) {
        element.addClass('input-error');
        var $err_msg = element.parent('div');
        $err_msg.find('.error').remove();

        var error = $('<div class="error"></div>').text(message);
        error.appendTo($err_msg);
        console.log(element);


      element.on('keypress change', function() {
            $(error).fadeOut(1000, function() {
            console.log(element);
            element.removeClass('input-error');
            });
        });

    };

    this.validate = function() {
      var errorCount = 0;

      this.form.find("select").each(function(index, field){
         var type = $(field).data("validation");
            var validation = Elements[type];
          if($(field).val() == "") {
            errorCount++;                       
            handleError($(field), validation.error);
          }
      });

        this.form.find("input, textarea").each(function(index, field){
            var type = $(field).data("validation");
            var validation = Elements[type];
            if(validation !== undefined) {            
             var re = new RegExp(validation.reg);                
             if (validation){                   
                 if (!re.test($(field).val())){ 
                    errorCount++;                       
                    handleError($(field), validation.error);                    
                }
             }
         }
        })


    var radioList = $('input:radio');
    var radioNameList = new Array();
    var radioUniqueNameList = new Array();
    var notCompleted = 0;
    for(var i=0; i< radioList.length; i++){
      radioNameList.push(radioList[i].name);
    }
    radioUniqueNameList = jQuery.unique( radioNameList );
    console.log(radioUniqueNameList);
    for(var i=0; i< radioUniqueNameList.length; i++){
        var field = $('#' + radioUniqueNameList[i]);
        var type = field.data("validation");
           var validation = Elements[type];
        if($('input[name='+type+']:checked', '#test').val() == undefined) {
            errorCount++;   
            handleError($(field), validation.error);
        }
    }

    return errorCount == 0;
    };
};

$(function(){

    $('form#test').on('submit', function (e) {
      var NoErrors =  new Validator(this).validate();
     if(NoErrors == true) {
         $.ajax({
             url: this.action,
             type: this.method,
             data: $(this).serialize(),
             success: function() {
                 // AJAX request finished, handle the results and error msg
                $('.success_msg').fadeIn().delay(3000).fadeOut();         
                $('input , textarea').val('').removeClass('error');

             }
         });

     }
        return false;
    })

【问题讨论】:

  • $("input#someField").val("");$("input[name=someName]").val("");$(".someClass").val("");。基本上你只需将值设置为空。
  • @Martin 是的,我的表单字段正在被清除,但提交也正在清除。在图片中查看
  • 您可以在输入提交上放置一个类,然后使用 $("input:not(.uniqueClass) , textArea")
  • @Husna 你也可以提供 html 吗?我很好奇你的按钮是什么样子的,因为你很可能以某种方式定位它。您的按钮是否以某种方式修改了 &lt;input&gt; 元素?我在问,因为一些 CSS 框架使用具有特定类型的输入字段,或者,使用类来使其成为某个按钮,所以也许这就是原因。例如,在您的代码中,您的目标是 ALL 输入元素。

标签: javascript jquery validation


【解决方案1】:

编辑:根据您编辑的问题、提供视觉效果和查看您的代码判断,您可能错误地定位了您的按钮。在您的代码中,您正在重置 每个 输入元素。一些 CSS 框架使用 &lt;input&gt; 元素和特定的 typeclass 来创建按钮。


使用 jQuery 清除输入字段的简单方法是将值设置为空字符串。例子:

重置,定位 id

$("input#someField").val("");

重置,定位名称

$("input[name=someName]").val("");

重置,定位类

$(".someClass").val("");

通过定位特定元素,您可以确保您希望重置的内容变为重置,而不是其他任何内容。

带有复选框的示例:

重置复选框,定位 id

$("#idOfCheckbox").attr('checked', false);

重置复选框,定位名称

$("checkbox[name=nameOfCheckbox]").attr('checked', false);

重置复选框,定位类

$(".classOfCheckbox").attr('checked', false);

大多数元素都遵循相同的逻辑。

【讨论】:

    【解决方案2】:

    根据您的表单输入元素尝试这样的操作:

    $('input[type="text"], textarea').val('');
    

    信用和参考:Clearing my form inputs after submission

    【讨论】:

    • $('input[type=text], input[type=number], input[type=email], textarea').val('').removeClass('error'); 我试过了,它工作正常。但在这里我必须添加所有输入字段。有没有其他方法可以排除只提交?
    • 你试过 $('input[type!="submit"], textarea').val('');` :p
    【解决方案3】:

    您可以在输入提交上放置一个类,然后使用

      $("input:not(.uniqueClass) , textArea")
    

    【讨论】:

    • 使用属性选择器可能比引入一个新类更有意义:input:not([type=submit])
    • @Ullas Hunka 我必须在其中添加此代码。我试了成功后不来。
    • 在输入标签中写入类,然后在成功方法中使用此代码,或者您可以使用@CBroe 给出的分辨率,这也是正确的。
    • @CBroe 仅当您在页面上有单个提交时才有效。如果是多个,您确实需要使其在意义上独一无二
    • @UllasHunka 这是关于排除提交按钮受到影响;在这方面,您的页面上是一打还是三打并不重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2022-07-08
    • 1970-01-01
    • 2011-10-21
    • 2018-03-14
    相关资源
    最近更新 更多