تالار گفتمان nCIS.ir

نسخه‌ی کامل: DropDownList Ajax
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
چند سوال در این رابطه داشتم:

همانطور که در عکس میبینید DropDownList مربوط به تگ خالی هست .من بر اساس DropDownList اولی اطلاعات DropDownList دومی رو با Ajax بارگذاری میکنم.

[attachment=228]

1- آیا میشه در DropDownList ها بجای درخواست Ajax یک درخواست معمولی ساده فرستاد و جواب درخواست رو به تگ DropDownList بعدی نسبت داد؟
2- همانطور که در عکس میبینید پیش فرض انتخاب روی first Post هست . چطور میشه در حالت پیش فرض هیچ پستی انتخاب نشده باشه ؟ چون الان وقتی من دوباره روی first Post کلیک میکنم هیچ درخواست Ajax یی ارسال نمیکنه . یعنی باید اول پست دوم رو انتخاب کنم و بعد دوباره پست اول رو که بتونم تگ های مربوط به اون رو ببینم.

3- مشکل بعدی هم که دارم میخوام واسش یک راه حل یا سناریو ارائه بدید .
وقتی من یک تگ رو به پست نسبت میدم دوباره میره به حالت اولی که توی عکس میبینید . و من اینو نمیخوام . میخوام وقتی کارم تموم شد دوباره همون پست قبلی انتخاب شده باشه و تگ های پست قبلی هم بارگذاری بشه.

متشکرم که وقت گذاشتید .
حدس میزنم جایی که دارید مقادیر رو ارسال میکنید روی onchange گذاشتید تا تغییر نکنه درخواستی ارسال نمیشه به همین خاطر حالت پیش فرض کار نمیکنه و حتما باید تغییری توش ایجاد بشه تا شروع به کار کنه
خیر از روش dependent dropdown استفاده کردم
کلا اون چیزی که مد نظرتون هست رو بگید تا بشه راه حل ارائه داد.
جواب سؤالات پست 1 :
1- نمیشه چون اگه AJAX کار نکنید، صفحه باید Refresh بشه که مناسب نیست چون فرم خالی میشه.
2- توی آرایه ای که برای پرکردن dropDownList میفرستین، اولش یه خونه با اندیس رشته خالی و پیام مناسب بگذارین. برای مثال:
public function getStateOptions()
{
    $result = array('' => 'انتخاب کنید');
    foreach(CHtml::listData(States::model()->findAll(array('order'=>'name')), 'id', 'name') as $id => $name) {
        $result[$id] = $name;
    }
    return $result;
}
3- کدتون رو بگذارین. اگه از CActiveForm استفاده میکنید برای تولید عناصر که خودش انتخاب کرده از قبل ولی اگه با CHtml میسازین، باید توی پارامتر selected شماره id عنصر موردنظر رو وارد کنید.
همونطور که گفتید یک  option با value=0 به dropDownList اضافه کردم که به صورت Selected هست .
و اینم کد view مربوط به post هست
<?php echo CHtml::activeDropDownList($model,'post', $model->getPostList(),array(
   'ajax'=>array(
       'type'=>'POST',
       'url'=>$this->createUrl('post/tagList'),
       'update'=>'#postTag_tag', 
   ),'options'=>array('0'=>array('selected'=>'selected')),
)); 
?>
و حالا مشکلی که دارم اینه که وقتی پست دوم رو یه تگ براش انتخاب میکنم دوباره به همین صفحه برمیگردم و انتخاب روی پست دوم میمونه و وقتی با فایرباگ نگاه میکنم هم option اول  و هم option سوم (پست دوم) selected شدن .
[attachment=231]
چطور اینو باید حلش کرد ؟
لازم نیست برای عنصر اول selected بگذارین. وقتی چیزی انتخاب نشده (دفعه اول که فرم ظاهر میشه) بطور خودکار اولین عنصر انتخاب میشه. موقعی که ویرایش میکنید، طبیعتاً عنصری که انتخاب شده بعنوان selected نمایش داده میشه.