javascript - 验证此表单(仅限数字)?

标签 javascript jquery jquery-validate numbers

背景##

我是一个完全的 JS 菜鸟(我能稍微看懂,但不会写)

问题

链接:http://s328792954.websitehome.co.uk//multi_step_form/

我正在尝试制作一个多步骤表单, 我浏览了一个在线教程,其中显示了一个基本示例。

无论如何.....

我只添加了一个数字字段(例如:贷款金额) 但是我使用的编码显然是错误的,因为现在它不接受任何形式的输入
+ 我认为它会干扰其他编码。

以“//检查输入的金额是否为数字”开头的部分是问题所在

复制代码

   $(function(){
//original field values
var field_values = {
        //id        :  value
        'username'  : 'username',
        'password'  : 'password',
        'cpassword' : 'password',
        'firstname'  : 'first name',
        'lastname'  : 'last name',
        'email'  : 'email address',
        'amountborrow' : '000'
};


//inputfocus
$('input#username').inputfocus({ value: field_values['username'] });
$('input#password').inputfocus({ value: field_values['password'] });
$('input#cpassword').inputfocus({ value: field_values['cpassword'] }); 
$('input#lastname').inputfocus({ value: field_values['lastname'] });
$('input#firstname').inputfocus({ value: field_values['firstname'] });
$('input#email').inputfocus({ value: field_values['email'] });
$('input#amountborrow').inputfocus({ value: field_values['amountborrow'] });  




//reset progress bar
$('#progress').css('width','0');
$('#progress_text').html('0% Complete');

//first_step
$('form').submit(function(){ return false; });
$('#submit_first').click(function(){
    //remove classes
    $('#first_step input').removeClass('error').removeClass('valid');


    //check if amount input is numbers
    var fields = $('#first_step input[type=amountborrow]');
    var  numOnly = /^[0-9]$/;
    var error = 0;
    fields.each(function(){
        var value = $(this).val();
        if( value.length<4 || value==field_values[$(this).attr('id')] || ( $(this).attr('id')=='amountborrow' && !numOnly(value) ) ) {
            $(this).addClass('error');
            $(this).effect("shake", { times:3 }, 50);

            error++;
        } else {
            $(this).addClass('valid');
        }
    });  




    //check if inputs aren't empty
    var fields = $('#first_step input[type=password]');
    var error = 0;
    fields.each(function(){
        var value = $(this).val();
        if( value.length<4 || value==field_values[$(this).attr('id')] ) {
            $(this).addClass('error');
            $(this).effect("shake", { times:3 }, 50);

            error++;
        } else {
            $(this).addClass('valid');
        }
    });     


    if(!error) {
        if( $('#password').val() != $('#cpassword').val() ) {
                $('#first_step input[type=password]').each(function(){
                    $(this).removeClass('valid').addClass('error');
                    $(this).effect("shake", { times:3 }, 50);
                });

                return false;
        } else {   
            //update progress bar
            $('#progress_text').html('33% Complete');
            $('#progress').css('width','113px');

            //slide steps
            $('#first_step').slideUp();
            $('#second_step').slideDown();     
        }               
    } else return false;
});


$('#submit_second').click(function(){
    //remove classes
    $('#second_step input').removeClass('error').removeClass('valid');

    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;  
    var fields = $('#second_step input[type=text]');
    var error = 0;
    fields.each(function(){
        var value = $(this).val();
        if( value.length<1 || value==field_values[$(this).attr('id')] || ( $(this).attr('id')=='email' && !emailPattern.test(value) ) ) {
            $(this).addClass('error');
            $(this).effect("shake", { times:3 }, 50);

            error++;
        } else {
            $(this).addClass('valid');
        }
    });

    if(!error) {
            //update progress bar
            $('#progress_text').html('66% Complete');
            $('#progress').css('width','226px');

            //slide steps
            $('#second_step').slideUp();
            $('#third_step').slideDown();     
    } else return false;

});


$('#submit_third').click(function(){
    //update progress bar
    $('#progress_text').html('100% Complete');
    $('#progress').css('width','339px');

    //prepare the fourth step
    var fields = new Array(
        $('#username').val(),
        $('#password').val(),
        $('#email').val(),
        $('#firstname').val() + ' ' + $('#lastname').val(),
        $('#age').val(),
        $('#gender').val(),
        $('#country').val(),
        $('#amountborrow').val()                       
    );
    var tr = $('#fourth_step tr');
    tr.each(function(){
        //alert( fields[$(this).index()] )
        $(this).children('td:nth-child(2)').html(fields[$(this).index()]);
    });

    //slide steps
    $('#third_step').slideUp();
    $('#fourth_step').slideDown();            
});


$('#submit_fourth').click(function(){
    //send information to server
    alert('Data sent');
});

});

请帮忙 (对不起,如果这是错误的部分,我真的不明白论坛部分)

#edit#
@Banaan 信息很棒 :) 谢谢!

但表单仍然接受不正确的信息... “字段”没有,但表格有并继续下一步。 我需要在某处}else return false 吗?

//第一步
$('form').submit(function(){ return false; });
$('#submit_first').click(函数(){
   //删除类
    $('#first_step input').removeClass('错误').removeClass('有效');


   //检查输入的金额是否为数字
    var fields = $('#first_step input[type=amountborrow]');
    var numOnly =/^[0-9]+$/;
    变种错误= 0;
    fields.each(函数(){
        变量值 = $(this).val();
        if( value.length<3 || value==field_values[$(this).attr('id')] || ( $(this).attr('id')=='amountborrow' && !numOnly.test (值(value)) ) ) {
            $(this).addClass('错误');
            $(this).effect("摇", { times:3 }, 50);


        } 别的 {
            $(this).addClass('有效');
        }
    });


   //检查输入是否不为空
    var fields = $('#first_step input[type=password]');
    变种错误= 0;
    fields.each(函数(){
        变量值 = $(this).val();
        if( value.length<4 || value==field_values[$(this).attr('id')] ) {
            $(this).addClass('错误');
            $(this).effect("摇", { times:3 }, 50);

            错误++;
        } 别的 {
            $(this).addClass('有效');
        }
    });


    如果(!错误){
        if( $('#password').val() != $('#cpassword').val() ) {
                $('#first_step input[type=password]').each(function(){
                    $(this).removeClass('有效').addClass('错误');
                    $(this).effect("摇", { times:3 }, 50);
                });

                返回假;
        } 别的 {
           //更新进度条
            $('#progress_text').html('33% 完成');
            $('#progress').css('宽度','113px');

           //滑动步骤
            $('#first_step').slideUp();
            $('#second_step').slideDown();
        }
    }否则返回假;
});

请进一步指教

最佳答案

您创建了某种新的 RegExp 对象,这是正确的方向,除非您可能想接受任何数字而不是仅接受一个数字:

var numOnly = /^[0-9]+$/;

其中[0-9]表示一个数字,+表示一次或多次出现。

但是,您使用 RegExp 对象的方式是不正确的。如果您查看第二步中的电子邮件正则表达式,他们使用

var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
var value = $(this).val();
emailPattern.test(value)

emailPattern.test(value) 部分是您错过的部分。要检查输入是否为数字,您使用的不是 !numOnly(value),而是 !numOnly.test(value)

有关 javascript 正则表达式的更完整教程,您可能需要查看 W3Schools

关于javascript - 验证此表单(仅限数字)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822292/

相关文章:

javascript - jQuery validate plugin - 如何关闭非提交验证结果?

javascript - 为什么我会遇到这个范围问题以及如何解决它?

javascript - Angular 中的 $q.all() 不能很好地解析

javascript - Facebook 和媒体内容占位符样式

javascript - 限制 Canvas 应用程序的帧速率

php - 如何从 jquery `formData` 中提取值以插入到 Mysql 中?

javascript - 单个元素的 jquery 验证插件 errorplacement

javascript - 隐藏 Vimeo 控件并替换为播放/暂停切换按钮

javascript - JavaScript 添加框阴影不会生效

javascript - jQuery 验证 : how to make the amount of characters no include the tokens generated by CKEditor?