PDA

View Full Version : unique validation وقتی textbox مربوطه رو ترک می‌کنم کار می‌کنه ولی موقع سابمیت خطا نشون نمیده



mojtaba.baghban
پنج شنبه 24 اسفند 1391, 14:12 عصر
unique validation وقتی textbox مربوطه رو ترک می‌کنم کار می‌کنه ولی وقتی سابمیت می‌کنم خطایی نشون نمیده.
این در حالیه که هر چیزی که مربوط به ajax رو فعال کردم و همچنین validationonsubmit رو هم فعال کردم نمیدونم چرا اینجوریه.
مثلا یه textbox به نام username دارم که باید یکتا باشه نمیدونم چرا وقتی textbox رو ترک می‌کنم خطا رو نشون می‌ده اما وقتی submit رو می‌زنم بقیه خطاها رو نشون می‌ده ولی این خطا رو نشون نمیده و رنگ textfield رو سبز می‌کنه انگار نه انگار که مقدارش یکتا نیست
کسی نمیدونه مشکل کجاست
اینترنت رو شخم زدم و یکی دقیقا مشکل منو داشت ولی جواب درستی بهش نداده بودن
http://www.yiiframework.com/forum/index.php/topic/25204-force-ajax-validation-on-form-submit/

mojtaba.baghban
پنج شنبه 24 اسفند 1391, 15:03 عصر
تازه فهمیدم که خطا رو نشون میده اما بشرطی که هیچ خطای دیگه‌ای وجود نداشته باشه. اگه غیر از اون خطای دیگه‌ای باشه این خطا رو نشون نمیده. من می‌خوام این خطا هم همراه بقیه خطاها نشون بده چیکار کنم؟

mojtaba.baghban
پنج شنبه 24 اسفند 1391, 16:19 عصر
ظاهرا yii ابتدت خطاهایی که نیاز به ajax نداره رو نشون میده اونایی که نیاز به ajax ندارن رو بررسی نمی‌کنه. اگه هیچ خطایی نبود اونوقت اونایی که به ajax نیاز دارن رو بررسی می‌کنه.
راه حلی ندارین؟

mojtaba.baghban
پنج شنبه 24 اسفند 1391, 23:57 عصر
کماکان منتظرم

mojtaba.baghban
دوشنبه 28 اسفند 1391, 00:13 صبح
ظاهرا کسی جواب منو نمی‌خواد بده
کدی که باعث این مشکل میشه رو پیدا کردم
خط ۳۲۷ از فایل jquery.yiiactiveform.js

if (!needAjaxValidation || settings.submitting && !$.isEmptyObject(messages)) {
if (settings.submitting) {
// delay callback so that the form can be submitted without problem
setTimeout(function () {
successCallback(messages);
}, 200);
} else {
successCallback(messages);
}
return;
}

که اگه بلوک if اجرا بشه باعث میشه تابع return بشه و از اونجا که اعتبار سنجی‌هایی که نیاز به ajax دارن بعد از این خطوط واقع شدن دیگه اجرا نمیشن وهمین باعث میشه که خطاهایی که نیاز به ajax دارن نشون داده نشن.
حالا میشه یه کاری کرد میشه شروط if رو به این صورت در آورد

if (!needAjaxValidation) {
if (settings.submitting) {
// delay callback so that the form can be submitted without problem
setTimeout(function () {
successCallback(messages);
}, 200);
} else {
successCallback(messages);
}
return;
}

که در اینصورت درست کار می‌کنه (خودم امتحان کردم)
حالا یه سوال واسم پیش اومده که چرا شروط رو به اینصورت نوشتن؟ چه مزیتی داره مگه؟
خداییش اینو دیگه جواب بدین

mojtaba.baghban
دوشنبه 28 اسفند 1391, 00:18 صبح
انگار با این تغییر کد یه مشکل حل میشه و یه مشکل خادتر می‌آد
حالا دیگه اونایی که به ajax نیاز ندارن بد کار می‌کنند