Как отобразить текстовое поле при выборе параметра в раскрывающемся списке с помощью AJAX - PullRequest
1 голос
/ 29 декабря 2011

Это выпадающий я использую ..

    <?php echo $form->labelEx($model,'status'); ?>
            <?php echo $form->dropDownList($model,'status',
array('0' =>'In active', '1'=> 'Active'),
array( 'onChange' => 'javascript:description()' )); ?>

Как отобразить текстовое поле с описанием динамического выбора неактивного ...

пожалуйста, предложите несколько уроков по yii + ajax для начинающих

Ответы [ 3 ]

6 голосов
/ 30 декабря 2011

То, что вы пытаетесь сделать, на самом деле довольно просто, и, благодаря инкапсуляции JQuery в Yii, вам не нужно беспокоиться о коде jquery. Вот ссылка: http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown#hh0 В любом случае, позвольте мне показать вам, как это сделать. Но перед тем, как у меня возникнет вопрос: эта строка кода: array( 'onChange' => 'javascript:description()' ) была вашей попыткой решить эту проблему? Или у него есть другой функционал, не связанный с этой темой? Если это часть вашей попытки решить проблему, просто удалите ее. Вам это не понадобится. Как я уже говорил ранее, вам не нужно беспокоиться о реальном коде jquery, он хорошо инкапсулирован в Yii. Иначе, если это не связано с этой темой, пусть, конечно, там, где она есть.

Теперь об обновлении ajax. Прежде всего, нам нужен div, где будет отображаться текстовое поле; Я буду использовать описание. Затем в раскрывающемся списке () указывается ajax-запрос следующим образом:

<?php echo $form->labelEx($model,'status'); ?>
<?php echo $form->dropDownList($model,'status',
array('0' =>'In active', '1'=> 'Active'),
array( 'onChange' => 'javascript:description()', 
       'ajax'=>array(
          'type'=>'POST',
          'url'=>CController::createUrl('YourController/actionWhichEchoesTheTextBox'),
          'update'=>'#description_id',
))); 
?>
<div id="description_id">
</div>

Вы можете заметить, что в атрибуте 'url' объявления ajax мы указали функцию, которая будет вызываться при срабатывании запроса ajax. В атрибуте «update» мы указали div, где будет отображаться результат вызова функции, указанной в атрибуте url.

Наконец, все, что осталось сделать, это объявить действие actionWhichEchoesTheTextBox (). Его можно объявить в любом контроллере, но если его нет в текущем контроллере, то вы должны объявить его как статический метод, чтобы сделать его доступным здесь. Поэтому, чтобы избежать каких-либо проблем, вы должны объявить это в текущем контроллере, и это будет выглядеть примерно так:

    public function actionWhichEchoesTheTextBox()
   {
      if($_POST['ModelName']['status']===0)
         echo CHtml::textField("ModelName", 'description'/*attribute name*/) ; 
   }

И это все.

3 голосов
/ 29 декабря 2011

Как даже мы сегодня вечером, только я сделал то же самое.

создайте div, который будет невидимым по умолчанию и когда будет содержать текстовое поле и метку для того, чье имя мы можем установить на основеобычные наименования для формы ...

и, как вы уже добавили функцию описания onChange, в этой функции сделайте отображение div в виде блока.

В модели у вас будетвключить имя переменной для этого поля текстового поля, если его в модели уже нет .... (я полагаю, вы можете взять его отсюда ...)

<?php echo $form->labelEx($model,'status'); ?>
<?php echo $form->dropDownList($model,'status',
array('0' =>'In active', '1'=> 'Active'),
array( 'onChange' => 'javascript:description(this.selectedIndex)' )); 
?>
<div id="description_id" style="display:none;">
<laabel for="...">..
<textarea name="ModelName[description]">....
</div>
<script>
function description(id)
{
if(id==0)
document.getElementById("description_id").style.display="block";
}
</script>
0 голосов
/ 28 декабря 2012

Там нет значения в переменной $_POST для динамического поля, которое было создано.то есть поле, которое было создано между тегом div.

...