Задать вопрос

Как устранить ajax-конфликты при выводе формы в модальном окне (Yii)?

Вывожу форму в модальное окно через renderPartial. Само модальное окно с ajax запросом обернул в виджет.

Но при редактировании выводимой формы (при клике на элементах формы) через ajax срабатывает action, который обрабатывает клик по другой кнопке на этой же страницы.

Пробовал отключать клиентскую валидацию, но все безуспешно. Совершенно непонятно каким образом происходит срабатывание другого экшина.

Вот код

Виджет

<?php 
class EditPostWidget extends CWidget {

    public $model = array();
    public $id;
    public function init()
    {

    }

    public function run()
    {

        $this->beginWidget('bootstrap.widgets.TbModal', array('id'=>$this->id,
            //'htmlOptions'=>array()
            ));

        echo '<div class="modal-header">';
        echo '<a class="close" data-dismiss="modal">&times;</a>';
        echo '<h4>Редактирование объявления</h4>';
        echo '</div>';

        echo '<div class="modal-body">';
        
        echo '</div>';

        echo '<div class="modal-footer">';
        $this->widget('bootstrap.widgets.TbButton', array(
        'id'=>'save_edit_post',
        'label'=>'Сохранить',
        'url'=>'#',
        //'buttonType'=>'submit',
        'type'=>'success',
        'htmlOptions'=>array(),
        ));

        $this->widget('bootstrap.widgets.TbButton', array(
        'label'=>'Закрыть',
        'url'=>'#',
        'htmlOptions'=>array('data-dismiss'=>'modal'),
        ));

        echo '</div>';
        $this->endWidget();

        

        echo '<script>
        //var post_id'.$this->model->post_id.';
        $("#buttonread").click(function(){
        var w = $(".modal-body");
        w.load("'.Yii::app()->createUrl('Posts/EditPost').'",{post_id:"'.$this->model->post_id.'"})
        //$.ajax({url:"'.Yii::app()->createUrl('Posts/EditPost').'", type: "POST", data: "post_id='.$this->model->post_id.'"})
        });
        </script>';

    }

}

?>


Форма

<?php /** @var BootActiveForm $form */
?>
<div id="modal">
<?php
     $form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(
        'type'=>'horizontal',
        'htmlOptions'=>array('style'=>'overflow:hidden;'),
         'enableClientValidation'=>true,
        'clientOptions'=>array(
            'validateOnSubmit'=>true,),
    )); ?>
        <div class="row">
        <div class="span4">
        <?php echo $form->labelEx($model,'title'); ?>
        <?php echo $form->textField($model,'title'); ?>
        <?php echo $form->error($model,'title'); ?>
        </div>
        </div>
        <div class="row">
        <div class="span4">
        <?php echo $form->labelEx($model,'text'); ?>
        <?php echo $form->textArea($model,'text', array(
            'rows'=>5,
            'cols'=>45,
            'style'=>'width: 526px;',
            )); ?>
        <?php echo $form->error($model,'text'); ?>
        </div>
        </div>
        <div class="row">
        <div class="span4">
        <?php echo $form->labelEx($model,'country_id'); ?>
        <?php echo $form->textField($model,'country_id'); ?>
        <?php echo $form->error($model,'country_id'); ?>
        </div>
        <div class="span4">
        <?php echo $form->labelEx($model,'category_id'); ?>
        <?php echo $form->textField($model,'category_id'); ?>
        <?php echo $form->error($model,'category_id'); ?>
        </div>
        </div>
        <div class="row">
        <div class="span4">
         <?php echo $form->labelEx($model,'state_id'); ?>
        <?php echo $form->textField($model,'state_id'); ?>
        <?php echo $form->error($model,'state_id'); ?>
        </div>
        <div class="span4">
        <?php echo $form->labelEx($model,'phone'); ?>
        <?php echo $form->textField($model,'phone'); ?>
        <?php echo $form->error($model,'phone'); ?> 
        </div>
        </div>
        <div class="row">
        <div class="span4">
        <?php echo $form->labelEx($model,'town_id'); ?>
        <?php echo $form->textField($model,'town_id'); ?>
        <?php echo $form->error($model,'town_id'); ?> 
        </div>
        <div class="span4">
        
            <?php echo $form->labelEx($model,'find_loss', array('style'=>'margin-bottom:10px;')); /*echo CHtml::tag('br');*/ ?>
            <?php echo $form->radioButtonList($model,'find_loss', array('1'=>'Пропажа', '2'=>'Находка'), array('style'=>'outline: none;', 'labelOptions'=>array('style'=>'display:inline'), )); ?>
        <?php echo $form->error($model,'find_loss'); ?>
        
        </div>
        </div>

        

    </div>
    <?php $this->endWidget(); ?>


Далее, при показе формы в модальном окне, при выборе элемента формы (текстового поля например) через ajax срабатывает тот самый (не нужный в данном контексте) action. Подскажите, как сделать, чтобы не было таких конфликтов?
  • Вопрос задан
  • 2890 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
masterx
@masterx
Онлайн-демо покажите, так проще будет разобраться и помочь вам.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы