2017-04-21 114 views
0

我已经在JS中构建了一个表单验证器,其中的一部分显示在下面。我只需要帮助显示错误并滚动到该字段。如何在自定义表单验证器的字段上显示错误?

好了,所以每个<input>将有属性指定自己需要的验证,如:

<input data-mandatory="yes" data-validation="phone" data-max-digits="10"> 

有属性的表单提交的时间分析,如果我遇到一个errornous领域,我需要滚动到该字段并显示英文错误(不需要多语言)。

var $form = $('#main-form'); 
$form.submit(function(event) { 

    event.preventDefault(); 

    // per field 
    $form.find("input,textarea").each(function(f, field){ 

     // read metadata 
     var type = $(field).attr("type"); 
     var mandatory = $(field).data("mandatory"); 
     var maxDigits = $(field).data("max-digits")) || 1000; 
     var validation = $(field).data("validation"); 

     // read value 
     var value = $(field).value(); 

     // process mandatory textfields 
     if (type == "text" || type == "number"){ 
      var strValue = trim(value.toString()); 
      if (mandatory && strValue.length == 0){ 

       // HOW DO I SHOW AN ERROR AT THE CURRENT FIELD? 
       // and how do I scroll to it? 
      } 
     } 

    }); 
}); 

编辑:我有一个代码不平凡的量在我移植到客户端,这是我的组织所需的Node.js(5K LOC)。该代码不显示在上面。

编辑:我看了网上一个小时,但我已经看到了jQuery form validator库不起作用,我需要的方式。我已经在Node.js中拥有了表格卫生&验证代码(它支持各种数据类型,例如电话号码,邮政编码等),我只是将它移植到客户端。

+0

你问的是不平凡的。因此,大量的jQuery插件来做到这一点。你看过他们的代码吗?有一个原因是他们包含了大量的代码。 – gforce301

+0

@ gforce301 - 是的,我在node.js中有很多不重要的代码,我将其移植到客户端。该代码不显示在上面。 –

回答

1

首先,我会推荐使用一些免费的验证插件。但是,如果你想由于某种原因自己编写它,而不是你的问题的答案是:

首先你需要在你的标记中隐藏错误信息。有很多方法可以做到这一点。最常见的解决方案是类似的东西:

<div> 
<input type="text" required /> 
<p class="error">Error</p> 
</div> 

比你需要显示它,在你的例子也可以这样做:

// process mandatory textfields 
     if (type == "text" || type == "number"){ 
      var strValue = trim(value.toString()); 
      if (mandatory && strValue.length == 0){ 
       //show error 
       $(this).parent().find('.error').show(); 
       //scroll 
       $('html, body').animate({ 
        scrollTop: $(this).offset().top 
       }, 2000); 
       return; // stop validation(becouse you dont want to scroll more times) 

     } 
    } 

你需要弄清楚一些事情(就像在再次验证之前隐藏所有的错误),但是这应该回答你的问题。

相关问题