رفتن به مطلب

اعتبار سنجی فرم


پست های پیشنهاد شده

سلام من یه فرم درست کردم بعد هر فیلدش به صورت انلاین بعد از اینکه از روی فیلد موس رو برداری اعتبار سنجی میکنه یه مشکل کوچیک هم داره اینکه اگه دکمه ثابمیت رو بزنی اگه کاربر چه فرم رو پر کرده باشه یا نکرده باشه فرم ارسال میشه این اعتبار سنجی با کمک ایدی صورت میگره یعنی در یه فایل(file.js) شرط هایی برای ایدی های درون input ها نوشته شده . همونطور که گفتم اعتبار سنجی موقعی که از رو فیلد موس رو برداری انجام میشه اما موقع ارسال , فرم ارسال میشه و اعتبار سنجی ها رو لحاظ نمیکنه . حالا میخوام اگه دکمه ثابمیت زده بشه اون اعتبار سنجی ها لحاظ بشه و فرم رو تا موقعی که درست پر نکرده باشه ارسال نکنه . دقیقا باید چه کار کنم؟

این فایل js


function result(el, msg) {
if(el.attr('switch') == 'show')
{
el.parent().parent().next().children('span').html(msg);
el.parent().parent().parent().attr('class', 'control-group ' + (msg == "" ? "success" : "error"));
}
else
{
el.parent().next().children('span').html(msg);
el.parent().parent().attr('class', 'control-group ' + (msg == "" ? "success" : "error"));
}
}
var values= new Array();
$(document).ready(function() {
$('input, select, textarea').blur(function() {
var $this = $(this);
var value = $this.val();

if(values[$(this).attr('id')]==value)
return;
values[$(this).attr('id')]=value;

switch($(this).attr('id')) {
case 'txtCardSerial':
{
if (value.match(/^[0-9]{10}$/)) {
result($this, '');
} else {
result($this, "شماره سریال معتبر نمي باشد.");
};
};


break;
case 'txtPostalCode':
{
if (value.match(/^[0-9]{10}$/)) {
result($this, '');
} else {
result($this, "کد پستي بايد شامل 10 کاراکتر عدد باشد.");
};
};
break;
};
});
});

و این هم فرم



<form method="post" id="form1" >
<tr class="control-group ">
<td style="width:140px;">سریال :</td>
<td style="width:330px;">
<input name="txtCardSerial" type="text" required="required" id="txtCardSerial" autocomplete="off" value=""
/>
</td>

<td style="width:140px;">
<span class="help-inline" ></span>
</td>
</tr>

<tr class="control-group ">
<td>کد پستی:</td>
<td>
<input autocomplete="off" type="text" maxlength="10" id="txtPostalCode" name="txtPostalCode" value="" >
</td>
<td><span class="help-inline" ></span></td>
</tr>



<tr>
<td colspan="3" style="text-align: center;padding: 20px;">
<button id="submit22" type="submit" name="submit222" class="btn btn-primary formbtn">ثبت</button></td>
</tr>

</form>

ویرایش شده توسط iman64
لینک به ارسال
  • 2 هفته بعد...

لطفاً اسپم ندید، کسی بتونه کمکتون میکنه.

اگه میخواید صرفاً از ارسال فرم خالی جلوگیری شه. به ورودی های فرمتون، خاصیت required رو اضافه کنید.

لینک به ارسال

منظور فقط جلوگیری نیست . میخوام وقتی دکمه ثابمیت زده میشه رویداد blur اجرا بشه و از ارسال فرم تا موقعی که درست پر نکرده باشد جلوگیری شود

لینک به ارسال
  • 2 هفته بعد...

از رویداد onsubmit استفاده کنید

http://www.w3schools.com/js/js_form_validation.asp

لینک به ارسال

درسته اما من ترکیبی از هر دو تا یعنی هم ondubmit و هم blur رو با هم میخوام

ویرایش شده توسط iman64
لینک به ارسال

مشکل که حل نشه مجبوریم بریم سراغ راه های دیگه . البته مشکل حل نشدنی نداریم مشکل خدمونیم که راه حل ها رو نمیدونیم :D:

خب بریم سراغ اصل مطلب این تابع رو نوشتم و هم روی onsubmit و هم روی onblur ایجادش کردم البته نمیدونم درست بهینه شده یا نه بعد این تابع روی onsubmit به درستی کار میکنه اما روی onblur یه مشکلی داره اینکه وقتی روی فیلدی کلیک کردی و خارج شدی کل خطا های فیلد های دیگر رو نشون بده که نباید اینطور باشه و باید خطای همون فیلد رو نشون بده . یه بررسی کنید دوستان


function validate1() {
errors = ''
errors1 = ''
errors2 = ''
errors3 = ''
errors4 = ''
errors12 = ''
errors13 = ''

if (document.getElementById('form1').number_p.value == "") {
errors += '- ' + 'شناسه را وارد کنید' + '\n';
}
else
{
var reg = /^[a-z]{1}[a-z0-9_]{3,21}$/;
var address = document.getElementById('number_p').value;
if (!reg.test(address)) {
errors += '- ' + 'شناسه مور قبول نیست ' + '\n';
}

}


if (document.getElementById('form1').name_l.value == "") {
errors1 += '- ' + 'نام را وارد کنيد' + '\n';
}

else
{
var pattern = /^[ا-ی_]{1,25}$/i;
var text = document.getElementById("name_l");
if (!pattern.test(text.value)) {
errors1 += '- ' + ' نام خود را به صورت فارسی بنویسید ' + '\n';
text.focus();
}


else if
(document.getElementById('name_l').value.length < 3) {
errors1 += '- ' + ' نام مستعار حداقل باید از سه حرف تشکیل شده باشد' + '\n';
}
}

if (document.getElementById('form1').name_s.value == "") {
errors2 += '- ' + 'ایمیل را وارد کنید' + '\n';
}
else
{
var reg = /^[a-z0-9._-]+@[a-z]+.[a-z.]{6,8}$/i;
var address = document.getElementById('name_s').value;
if (!reg.test(address)) {
errors2 += '- ' + 'ایمیل را به صورت صحیح وارد کنید' + '\n';
}
}
if (document.getElementById('form1').id_number.value == "") {
errors3 += '- ' + 'شماره شناسنامه را وارد کنيد' + '\n';
}
else
{
var num1 = document.getElementById('form1').id_number.value.search("[^0-9]")
if ((num1 >= 0) || (document.getElementById('form1').id_number.value.length > 10)) {
errors3 += '- ' + 'خطا در اطلاعات ورودي شناسنامه' + '\n';
}
}

if (document.getElementById('form1').id_number1.value == "") {
errors12 += '- ' + 'شماره موبایل را وارد کنيد' + '\n';
}
else
{
var pattern = /^(((\+|00)98)|0)?9[123]\d{8}$/;
var text = document.getElementById("id_number1");
if (!pattern.test(text.value)) {
errors12 += '- ' + 'شماره موبایل را به صورت صحیح وارد کنید' + '\n';
}
}



if (document.getElementById('form1').id_number2.value == "") {
errors13 += '- ' + 'آدرس سایت را وارد کنید' + '\n';
}
else
{
var pattern = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
var text = document.getElementById("id_number2");
if (!pattern.test(text.value)) {
errors13 += '- ' + 'آدرس سایت را به صورت صحیح وارد کنید' + '\n';
}
}




if (document.getElementById('form1').saltvl.value == "") {
errors4 += '- ' + 'سال تولد را وارد کنيد' + '\n';
}
else
{
var num1 = document.getElementById('form1').saltvl.value.search("[^0-9]")
if ((num1 >= 0) || (document.getElementById('form1').saltvl.value.length < 2) || (document.getElementById('form1').saltvl.value.length > 2)) {
errors4 += '- ' + 'سال تولد 2 رقمي مي باشد' + '\n';
}
}
if (errors != "") {
document.getElementById('family-error').innerHTML = errors;
}

else {
document.getElementById('family-error').innerHTML = '';
}
if (errors1 != "") {
document.getElementById('family-error1').innerHTML = errors1;
}

else {
document.getElementById('family-error1').innerHTML = '';
}

if (errors2 != "") {
document.getElementById('family-error2').innerHTML = errors2;
}

else {
document.getElementById('family-error2').innerHTML = '';
}

if (errors3 != "") {
document.getElementById('family-error3').innerHTML = errors3;
}

else {
document.getElementById('family-error3').innerHTML = '';
}
if (errors4 != "") {
document.getElementById('family-error4').innerHTML = errors4;
} else {
document.getElementById('family-error4').innerHTML = '';
}
if (errors12 != "") {
document.getElementById('family-error12').innerHTML = errors12;
} else {
document.getElementById('family-error12').innerHTML = '';
}



if (errors13 != "") {
document.getElementById('family-error13').innerHTML = errors13;
} else {
document.getElementById('family-error13').innerHTML = '';
}



if (errors != errors1 != errors2 != errors3 != errors4 != errors12 != errors13 != "") {
return false;
}

{
return true;
}
}

ویرایش شده توسط iman64
لینک به ارسال
  • 2 هفته بعد...

خب مشکل که حل نشد بازم بریم سراغ سوال بعد اگر در فرم ما سه فیلد یکی select و یکی هم فیلد کد امنیتی و اخری هم فیلد سابمیت داشته باشیم و اگر کاربر یکی از گزینه های فیلد select انتخاب کرده باشد منتها اگر فیلد کد امنیتی را اشتباه وارد کرده است و اگر فرم رو ارسال کند و بعد از بارگزاری مجدد صفحه اعتبار سنجی میشود که کد امنیتی اشتباه است حالا فیلد select به حالت قبل بازگشته است باید چیکار کنم که بازم همان گزینه که کاربر انتخاب کرده بود باز هم همون انتخاب شده باشد

ویرایش شده توسط iman64
لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...