ورود

View Full Version : فرم های yii و validation تو حالت خاصی (حل شد)



hooman.pro
سه شنبه 11 آذر 1393, 10:16 صبح
سلام میخواهم فرمم فقط موقع سابمیت ارور بگیرد. (حالت پیش فرض yii ) اما زمانی که کاربر در آن فیلد مقدار درست وارد کرد و بلور رخ داد ارور پاک شود.
اما زمانی که این ها رو میزارم:


$form = $this->beginWidget('CActiveForm', array(
'id' => 'question-form',
// Please note: When you enable ajax validation, make sure the corresponding
// controller action is handling ajax validation correctly.
// There is a call to performAjaxValidation() commented in generated controller code.
// See class documentation of CActiveForm for details on this.
'enableAjaxValidation' => false,
'enableClientValidation'=>true,
'focus'=>($model->hasErrors()? '.error:first' : array($baseUserModel, 'name')),
'clientOptions' => array(
'validateOnSubmit'=>true,
'validateOnChange'=>false,
'validateOnBlur'=>true,
'validateOnType'=>false,
'afterValidate'=>'js:function(form,data,hasError)
{
if(hasError)
{
var j=0;
for(var i in data){
if(j==0){
scrollWin("#"+i,"#"+i);
}
j++;
}
}else{
return true;
}

}'
),

));


اتفاقی که می افته اینه که با بلور شدن از روی هر فیلد آن را ولیدت میکند و اگر ارور داشته باشد نمایش میدهد و اگر ارور از بین رفته باشد آن را حذف میکند. خوب هست اما من میخواهم فقط در زمانی که ارور (به وسیله سابمیت فرم به وجود آمده) داشت با وارد شدن مقدار صحیح و بلور شدن از بین برود. همین و از فیلد ها دیگر ارور جدید نگیرد تا سابمیت مجدد.




و سوال دوم : برای یک فرم دیگر میخواهم دفعه اول که یوزر وارد صفحه میشود تا سابمیت فرم هیچ اروری از او نگیرد اما بعد از سابمیت و گرفتن ارور ها به همین صورت بالا یعنی با بلور یا change ارور بگیرد و در صورت درست بودن هم از بین برود.

MMSHFE
چهارشنبه 12 آذر 1393, 09:12 صبح
نمیشه همزمان خدا و خرما رو با هم داشته باشین. یا AJAX Validation میخواین یا نمیخواین. اگه AJAX Validation نمیخواین باید خودتون یک کد دستی بنویسید که خطا رو حذف میکنه. برای مثال:

Yii::app()->clientScript->registerScript('removeErrors', '
$("input").blur(function() {
$(this).siblings(".error").hide();
});
');
نکته: کد فوق تست نشده و فقط بعنوان مثال ذکر کردم تا منطق کار دستتون بیاد. شما باید توی Firebug چک کنید ببینید کادر خطا چه شناسه ای داره و ارتباطش با کادر مربوطه چیه و با متدهای siblings و children و parent و find و... توی jQuery عنصر مربوطه رو پیدا و مخفی یا حذف کنید.

hooman.pro
پنج شنبه 13 آذر 1393, 10:37 صبح
ممنون جناب شهرکی اما تو این حالت فقط زمانی که بلور رخ دهد ارور پاک میشود. و اصلا چک نمیشود که اگر مقداری وارد شده یا نشده. و فقط با بلور شدن ارور از بین میرود همین. درسته؟

MMSHFE
پنج شنبه 13 آذر 1393, 11:19 صبح
بله همینطوره. اگه میخواین چک هم بشه که چیزی وارد شده یا نه این شرط رو اضافه کنید:
if($(this).val() !== "") { ... }