javascript - jQuery 表单验证插件 : Return false on error

标签 javascript jquery forms validation plugins

在学习了如何制作 jQuery 插件的教程后,我决定尝试一下并制作一个表单验证插件。到目前为止,我已经实现了 90% 的期望,唯一剩下的就是在找到空字段时使表单返回 false。

JSFIDDLE

我已将整个代码放在 jsfiddle 中,但它似乎不起作用。也许是因为我需要包含我的插件文件而不是将其粘贴到脚本部分。但我分享它是为了以防万一您需要查看整个代码。

插件工作流程

(function(jQuery) {
    window.cnt = 0;

    jQuery.fn.border = function() {

       this.each(function() {
        var ele = jQuery(this);
        var cur_val, ele_name;
        if(// element is input, select, or textarea)
        {
           cur_val = ele.val();
        }
        else if(// element is radio)
        {
           ele_name = ele.attr('name');
           cur_val = $('input:radio[name="'+ele_name+'"]:checked').val();
        }
        else if(// element is checkbox)
        {
           ele_name = ele.attr('name');
          cur_val = $('input:checkbox[name="'+ele_name+'"]:checked').val();
        }

        if(! cur_val) // need to do something here to prevent form submission
        {
            cnt++;
            if(// input, textarea, select element)
            {
               ele.addClass('border');
            }
            else if(// radio or checkbox element)
            {
               ele.parent().addClass('border');
            }               
        }
        else // need to do something here to make the form submission happen
        {               
            if(// input, select, textarea)
            {
                ele.removeClass('border');
            }
            else if(radio or checkbox)
            {
                ele.parent().removeClass('border');
            }
        }

        });         
        return this;            
    };
})(jQuery);// JavaScript Document

我尝试过的

<script type="text/javascript">
    $(function(){
        $('form').submit(function(){
            $('.required').border();
            if(window.cnt > 0)
            {               
                return false;
            }
            else
            {               
                return true;
            }
        });
    });
</script>

我创建了一个全局变量cnt并尝试在表单提交函数中使用它。当有空元素时它起作用,但即使在所有元素都填满后它也会返回 false 。在警告 cnt 的值后,我发现在每个按钮上单击 cnt 的值都会从之前的值中追加,因此 cnt > 0 始终返回 true

因此,我试图找到一种从插件函数本身返回 false 的方法,这样我就不必添加 if-else 条件调用插件函数后。

简而言之,我想要实现的是

$(function(){
    $('form').submit(function(){
        $('.required').border(); // this line should take care of returning true or false for the submit function           
    });
});

因此,用户只需调用 $('.required').border(); 即可完成其余工作。

最佳答案

查看我在下面的代码中使用 valid 变量而不是 window.cnt 的方式。

jQuery.fn.border = function() {

   var valid = true;

   this.each(function() {
    var ele = jQuery(this);
    var cur_val, ele_name;
    if(// element is input, select, or textarea)
    {
       cur_val = ele.val();
    }
    else if(// element is radio)
    {
       ele_name = ele.attr('name');
       cur_val = $('input:radio[name="'+ele_name+'"]:checked').val();
    }
    else if(// element is checkbox)
    {
       ele_name = ele.attr('name');
      cur_val = $('input:checkbox[name="'+ele_name+'"]:checked').val();
    }

    if(! cur_val) // need to do something here to prevent form submission
    {
        valid = false;
        if(// input, textarea, select element)
        {
           ele.addClass('border');
        }
        else if(// radio or checkbox element)
        {
           ele.parent().addClass('border');
        }               
    }
    else // need to do something here to make the form submission happen
    {               
        if(// input, select, textarea)
        {
            ele.removeClass('border');
        }
        else if(radio or checkbox)
        {
            ele.parent().removeClass('border');
        }
    }

    });
    return valid;       
}

关于javascript - jQuery 表单验证插件 : Return false on error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14009533/

相关文章:

javascript - 使用 Snap.svg 为多边形中的点设置动画

jquery - 通过 jquery $.ajax 发布时的 ASP.NET MVC 验证框架?

javascript - 使用 AJAX 请求时还需要 Form 元素吗?

javascript - 在提交 PHP 表单之前显示确认提示框

javascript - document.getElementById ("someId") 比。一些ID

javascript - Redux.js - 可以手动创建一个函数来监听 Javascript 中的另一个函数吗?

javascript - 在 HapiJS Confidence 配置对象中设置过滤对象的默认值

javascript - 将属于某个数组名称的所有输入检索到 jquery 变量中

javascript - neo4j - 自动完成 JavaScript

python - 使用 django 表单上传文件