简体   繁体   English

在动态选择选项时使用jQuery验证表单

[英]Validate form with jQuery on dynamically selecting options

I am new in jQuery and JavaScript. 我是jQuery和JavaScript的新手。 I want to validate form and check different conditions on each dropdown select list and also show custom error on each condition. 我想验证表单并在每个下拉选择列表中检查不同的条件,并在每个条件上显示自定义错误。 How can I do this? 我怎样才能做到这一点? I have tried but every time I failed. 我曾经尝试过,但是每次失败。

Here is my HTML code: 这是我的HTML代码:

<select name="forwardTo" id="forwardTo" onchange="numberLineTo(this.value)">
    <option name="none" value="0">Select</option>
    <option name="MobileNo" value="3" id="MobileNo">Mobile Number</option>
    <option name="character" value="1">Character</option>
</select>
<input name="carrierAddress" type="text" id="carrierAddress">
<div style="margin-left:140px;"><input type="submit" name="submit" value="Submit" onclick="numberLineTo();"/></div>

and this is my script 这是我的剧本

function numberLineTo(){
    $("<span class='err'></span>").insertAfter("#carrierAddress");
    if($("#forwardTo").val() =='0'){
        $("#carrierAddress").unbind("keypress").hide();
        $('.err').empty();
        $('.err').html("Please Select any option");
    }

    if( $("#forwardTo").val() =='3')
    {
        $("#carrierAddress").show();
        $('.err').empty();

        $("#carrierAddress").bind("keypress",(function (e) {
            if(e.which == ""){
                $('.err').clear();
                $("#carrierAddress").show();
                $('.err').replaceWith("Please enter your phone number");
                return true;
            }
            //if the letter is not digit then display error and don't type anything
            if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
                //display error message
                if(!isNaN(e.which)){
                    $('.err').empty();
                    $("#carrierAddress").show();
                    $('.err').empty().replaceWith("Please provide a valid phone number");
                    return true;

                }
                return false;
                }
            })
        );
    }

    if($("#forwardTo").val() =='1'){
        $("#carrierAddress").unbind("keypress");
        $("#carrierAddress").show();
        $('span').removeClass('.err');
    }
}

Here is a full better version : http://jsfiddle.net/Oliboy50/bbtVH/3/ 这是一个更好的完整版本: http : //jsfiddle.net/Oliboy50/bbtVH/3/

HTML HTML

<select name="forwardTo" id="forwardTo">
    <option value="0">Select</option>
    <option value="3" id="MobileNo">Mobile Number</option>
    <option value="1">Character</option>
</select>
<input name="carrierAddress" type="text" id="carrierAddress">
<span id="carrierAddress-error" class="err"></span>

<div style="margin-left:140px;">
    <input type="submit" name="submit" value="Submit" />
</div>

JS JS

$(document).ready(function () {
    // Best practices when using reccurent jQuery objects
    var $forwardTo = $("#forwardTo"),
        $carrierAddress = $("#carrierAddress"),
        $carrierAddressError = $('#carrierAddress-error');
    // Others "global" variables
    var reg = /^\d+$/;

    $forwardTo.on('change', function () {
        var $that = $(this);
        // You should do a "switch" instead of several "if" statements
        if ($that.val() == '0') {
            $carrierAddress.hide();
            $carrierAddressError.text("Please Select any option");
        }
        if ($that.val() == '3') {
            $carrierAddress.show();
            $carrierAddressError.text("");
        }
        if ($that.val() == '1') {
            $carrierAddress.show();
            $carrierAddressError.removeClass('err'); // why ? 
        }
    });

    // Use 'input' event instead of 'keypress' which doesn't understand copy/paste for example
    $carrierAddress.on('input', function () {
        var $that = $(this);
        // trim() remove spaces on each side of the string
        if ($that.val().trim() == "") {
            $carrierAddressError.text("Please enter your phone number");
        }
        //if the string doesn't contain only digits then display error
        else if (!reg.test($that.val().trim())) {
            $carrierAddressError.text("Please provide a valid phone number");
        }
        else{
            $carrierAddressError.text("");
        }
    });
});

By the way you really should try to learn by reading some documentation or tutorials before using something blindly. 顺便说一句,您真的应该在盲目使用某些东西之前尝试阅读一些文档或教程来学习。

I know jquery has a plugin called 'jquery.validate' that could help you doing this kind of stuff... I've never used it though. 我知道jquery有一个名为“ jquery.validate”的插件,可以帮助您做这种事情……尽管我从未使用过。

You're almost there but it can be cleaned up and structured a little better... 您快到了,但是可以清理和整理好一点了。。。

HTML (Removed the in-line javascript events): HTML(已删除嵌入式javascript事件):

<select name="forwardTo" id="forwardTo">
    <option name="none" value="0" selected="selected" >Select</option>
    <option name="MobileNo" value="3" id="MobileNo">Mobile Number</option>
    <option name="character" value="1">Character</option>
</select>
<input name="carrierAddress" type="text" id="carrierAddress">
<div style="margin-left:140px;"><input type="submit" name="submit" value="Submit"/></div>

JavaScript JavaScript的

$("#carrierAddress").after($("<span class='err'></span>"));

function numberLineTo(){
    var val = $("#forwardTo").val();
    $("#carrierAddress").hide();
    $('.err').empty();
    if(val == '0'){
        $('.err').html("Please Select any option");
    }
    if(val == '3')    {
        $("#carrierAddress").show();       
    }
};
numberLineTo();

$("#forwardTo").on("change",function(e){
    numberLineTo();
});

$("input[type=submit]").on("click",function(e){
    numberLineTo();
    alert("do something!");
});

$("#carrierAddress").on("keypress",function(e){
    $('.err').empty();
    if (e.keyCode === 13) {// 'enter' key
        return;
    }
    //if the letter is not digit then display error and don't type anything
   if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
       //display error message
       if(!isNaN(e.which)){
           $("#carrierAddress").show();
           $('.err').html("Please provide a valid phone number");
       }
   return false;
   }
});

Here's the demo: http://jsfiddle.net/89qtN/ 这是演示: http : //jsfiddle.net/89qtN/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM