ایجاد اعتبارسنجی با استفاده از BootStrap و jQuery Tooltip

چهارشنبه 6 مرداد 1395

در این مقاله شما درباره jQuery Tooltip Validation با استفاده از BootStrap مطالبی را خواهید اموخت . شاید به این مشکل بر خورده باشید که با نمایش پیغام شما در یک فرم ، صفحه بندی شما کاملا به هم بریزد ، ما در این مقاله سعی در برطرف نمودن این مشکل با استفاده از tooltip ها را داریم .

 ایجاد اعتبارسنجی با استفاده از BootStrap و jQuery Tooltip

در حالت کلی ما از jQuery unobtrusive validation Plugin ها در برنامه های ASP.Net MVC استفاده می کنیم .
ما در این مقاله در مورد مطالب زیر مطالبی را خواهیم آموخت :
1.معایب jQuery Validation  در MVC .
2. jQuery tooltip validation .

برخی معایب در استفاده از این Plugin  وجود دارد . در زمان استفاده از این plugin ، یک تگ span را برای نمایش پیام خطا (Error Messages) ایجاد می کند .اگر شما ، برای مثال ، یک فرم افقی بالای کنترلر ها دارید ،  ممکن است که آن درست کار نکند ، تا زمانی که از page layout رد شوند . برای همین تصمیم بر آن شد تا تغییراتی را در کتابخانه jQuery Validation ایجاد کنیم تا بجای استفاده از span در نشان دادن  Error Message ها از Tooltip استفاده کند . که به شما  چگونگی این کار را  نشان خواهیم داد . 
به کمک BootStrap از tooltip استفاده کنید .

قبل از این که به سراغ tooltip ها برویم ، نگاهی به روش قدیمی آن می اندازیم ، که در زیر آن را می بینیم .

زمانی که روی دکمه Register کلیک میکنیم ، همانطور که در شکل زیر مشاهده میکنید ، پیامی نمایش داده میشود .


اگر من طول پیام را زیاد کنم ، اتفاق بالا رخ می دهد و قسمت بندی صفحه به هم میخورد . در نتیجه این یکی از دلایلی است که استفاده از default behavior of the  jQuery validation plugin  را بد میکند . ما tooltip را با Error type عوض میکنیم به این دلیل که ما نمیخواهیم صفحه بندی ما به هم بخورد .

از این جا به بعد تازه مقاله jQuery tooltip validation شروع می شود .
 

مرحله اول :
1.یک پروژه ASP.Net MVC  بسازید .



2.فایل های زیر را به برنامه اضافه کنید .





3.  HomeController.cs. را بسازید .

Right click->Controllers folder->Add->Controller->name it as HomeController.cs.



4.متد Index را به Controller اضافه کنید .
5. view را به متد View اضافه کنید .

Right click->Index Method->Add View->click OK.



Index View ساخته شد .
6. حالا کدهای زیر را در فایل Index.cshtml قرار دهید .

<!DOCTYPE html>
<html>
<head>
    <title>Bootstrap tooltip Example</title>

    <!-----------------resource files------------->
    <link href="~/Content/bootstrap.min.css" rel="stylesheet" />
    <script src="~/Scripts/jquery-1.9.1.min.js"></script>
    <script src="~/Scripts/bootstrap.min.js"></script>
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery-validate.bootstrap-tooltip.min.js"></script>
    <script src="~/Scripts/myscript.js"></script>

    <style type="text/css">
        .tooltip{
            margin-left:100px;           
        }
        .tooltip-inner {
            background: #ff3333; /*tooltip text background color*/
            border-radius: 0px;
            font-weight: bolder;
            box-shadow: 1px 1px 1px 1px black;
        }
        .tooltip.top .tooltip-arrow {
            border-top-color: red;
            margin-left: -55px;           
        }
        input[type="text"],input[type="password"],input[type="number"],input[type="email"], #CountryDropdownlst {
            box-shadow: 1px 1px 1px 1px grey;
            width: 200px;
        }
        #CountryDropdownlst{
            height:27px;
        }
        /*.tooltip-inner tooltip-arrow {
            margin-left: 200px;
        }*/
    </style>
</head>
<body>
<div id="main">

    @using (Html.BeginForm("Index", "Home", FormMethod.Post, new { name = "RegistrationForm", id = "RegistrationForm" }))
    {
        <fieldset style="padding-left: 100px; box-shadow: 2px 2px 2px 2px #000;margin-top:30px;height:500px;">
            <legend style="font-size:larger;font-weight:bold;">ثبت نام</legend>
            <div id="left-part" align="left" style="float:left;margin-left:20px;">
                @Html.Label("نام", new { required = "required" })<br />
                @Html.TextBox("FirstName")<br /><br />
                @Html.Label("نام خانوادگی")<br />
                @Html.TextBox("LastName")<br /><br />
                @Html.Label("نام کاربری")<br />
                @Html.TextBox("UserName")<br /><br />
                @Html.Label("جنسیت")<br />
                @Html.RadioButton("Gender", "Male", false, new { id = "rbnMale", name = "rbnMale" })مذکر
                @Html.RadioButton("Gender", "Female", false, new { id = "rbnFemale", name = "rbnFemale" })مونث
                <br /><br />
                @Html.Label("ایمیل:")&nbsp;&nbsp;<br />
                @Html.TextBox("Email", null, new { type = "email" })<br /><br />
            </div>
            <div id="right-side" style="margin-left:400px;">
                @Html.Label("رمز")<br />
                @Html.Password("Password")<br /><br />
                @Html.Label("تکرار رمز")<br />
                @Html.Password("ConfirmPassword")<br /><br />
                @Html.Label("شماره موبایل")<br />
                @Html.TextBox("MobileNo", null, new { type = "number" })<br /><br />
                @Html.Label("شهر")<br />
                @Html.TextBox("State")<br /><br />
                @Html.Label("کشور")<br />
                @Html.DropDownList("CountryDropdownlst", new List<SelectListItem>()
                         {
                            new SelectListItem(){Text="ایران",Value="0"},
                            new SelectListItem(){Text="چین",Value="1"},
                            new SelectListItem(){Text="آمریکا",Value="2"},
                            new SelectListItem(){Text="روسیه",Value="3"}
                         }, "--انتخاب--", new { id = "CountryDropdownlst" })
                <br /><br />
                <input type="submit" value="ثبت" id="btnSubmit" name="btnSubmit" class="btn btn-primary"/>
            </div>
        </fieldset>
    }
    <br />
</div>
</body>
</html>

مرحله دوم :
1. myscript.js را به پوشه script اضافه کنید .


myscript.js 

//if no errors form will be submited
$.validator.setDefaults({
    submitHandler: function () {
        alert("form submited!");
    }
});
debugger;
$(document).ready(function () {
    $("#RegistrationForm").validate({
        rules: {
            FirstName: {
                required: true,
                minlength: 4,
                maxlength: 15
            },
            LastName: {
                required: true,
                minlength: 4,
                maxlength: 15
            },
            UserName: {
                required: true,
                minlength: 5
            },
            Gender: { required: true },
            Email: {
                required: true,
                email: true
            },
            Password: {
                required: true,
                minlength: 5,
                maxlength: 20
            },
            ConfirmPassword:{
                required: true,
                equalTo:"#Password"
            },
            MobileNo: {
                required: true,
                number: true,
                minlength: 10,
                maxlength:12
            },
            State: { required: true ,minlength:5},
            CountryDropdownlst: {
                required:true
            }
        },
        messages: {
            Gender: "لطفا جنسیت خود را مشخص کنید!",
            FirstName: {
                required: "نام اجباری است ",
                minlength: "حداقل 4 کاراکتر باید وارد کنید ",
                maxlength:"حداکثر 15 کاراکتر مجاز است"
            },
            LastName: {
                required: "نام خانوادگی اجباری است ",
                minlength: "حداقل 4 کاراکتر باید وارد کنید",
                maxlength: "حداکثر 15 کاراکتر مجاز است"
            },
            UserName: {
                required: "نام کاربری اجباری است",
                minlength: "حداقل 4 کاراکتر باید وارد کنید"
            },
            Password: {
                required: "رمز اجباری است",
                minlength: "حداقل 4 کاراکتر باید وارد کنید"
            },
            ConfirmPassword: {
                required: "پسورد را تایید کنید",
                equalTo:"پسورد همخوانی ندارد "
            },
            MobileNo: {
                required: "لطفا شماره موبایل خود را وارد کنید ",
                minlength: "شماره معتبر وارد نید "
            },
            State:"استان خود را وارد کنید ",
            CountryDropdownlst:"کشور خود را انتخاب کنید "

        },
        //tooltip options to change position of tooltip..
        tooltip_options: {
            FirstName: { trigger: 'focus' },
            Gender: { placement: 'top', html: true }    //placement:'bottom'for bottom
        },
        //submitHandler: function (form) {
        //    $("#validity_label").html('<div class="alert alert-success">No errors.  Like a boss.</div>');
        //},
        invalidHandler: function (form, validator) {
            $("#validity_label").html('<div class="alert alert-error">There be ' + validator.numberOfInvalids() + ' error' + (validator.numberOfInvalids() > 1 ? 's' : '') + ' here.  OH NOES!!!!!</div>');
        }
    });
});

مرحله سوم :
Style را برای نمایش دادن error اضافه کنید .

.tooltip{  
       margin-left:100px;             
   }  
   .tooltip-inner {  
       background: #ff3333; /*tooltip text background color*/  
       border-radius: 0px;  
       font-weight: bolder;  
       box-shadow: 1px 1px 1px 1px black;  
   }  
   .tooltip.top .tooltip-arrow {  
       border-top-color: red;  
       margin-left: -55px;             
   }  
   input[type="text"],input[type="password"],input[type="number"],input[type="email"], #CountryDropdownlst {  
       box-shadow: 1px 1px 1px 1px grey;  
       width: 200px;  
   }  
   #CountryDropdownlst{  
       height:27px;  
   }  
   /*.tooltip-inner tooltip-arrow { 
       margin-left: 200px; 
   }*/  

حالا برنامه را دوباره اجرا کنید ، خروجی زیر را خواهیم داشت .


بدون اضافه کردن چیزی در فیلد ها ، دکمه ثبت را میزنیم ، خواهیم دید که :


در بالا دیدیم که افزایش طول Error دیگر تاثیری در صفحه بندی ما نخواهد داشت ، و با اضافه شدن طول erro طول  tooltip ما افزایش خواهد یافت .

آموزش بوت استرپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • Jquery
  • 3k بازدید
  • 3 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید