Yii bootstrap отправляет форму внутри модального окна с помощью модальных кнопок

Я пытаюсь отправить форму из модального окна, используя модальные кнопки в модальном нижнем колонтитуле. Сама форма загружается через ajax по ссылке (контроллер / действие).

Для большей ясности я прикрепил это изображение: введите описание изображения здесь

Это код модального окна:

<?php $this->beginWidget('bootstrap.widgets.TbModal', array('id'=>'modal')); ?>

<div class="modal-header">
    <a class="close" data-dismiss="modal">&times;</a>
    <h4>Client Ticket Status Update</h4>
</div>
<div class="modal-body">

</div>
<div class="modal-footer">
    <?php $this->widget('bootstrap.widgets.TbButton', array(
        'buttonType'=>'ajaxSubmit',
        'type'=>'primary',
        'label'=>'Save changes',
        'url'=>'#',
        'htmlOptions'=>array('data-dismiss'=>'modal'),
    )); ?>
    <?php $this->widget('bootstrap.widgets.TbButton', array(
        'label'=>'Close',
        'url'=>'#',
        'htmlOptions'=>array('data-dismiss'=>'modal'),
    )); ?>
</div>

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

Это javascript, который загружает форму внутри модального окна:

$("a[data-toggle=modal]").click(function(){
    var target = $(this).attr('data-target');
    var url = $(this).attr('href');
    if(url){
        $(target).find(".modal-body").load(url);
    }
});

Это представление формы:

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'client-ticket-form',
    'enableAjaxValidation'=>false,
)); ?>

    <p class="note">Fields with <span class="required">*</span> are required. </p>


    <?php echo $form->errorSummary($ticket); ?>

    <div>
        <?php echo $form->labelEx($ticket,'sent_to'); ?>
        <?php echo $form->textField($ticket,'sent_to'); ?>
        <?php echo $form->error($ticket,'sent_to'); ?>
    </div>

    <div>
        <?php echo $form->labelEx($ticket,'courier'); ?>
        <?php echo $form->textField($ticket,'courier'); ?>
        <?php echo $form->error($ticket,'courier'); ?>
    </div>

    <div>
        <?php echo $form->labelEx($ticket,'awb'); ?>
        <?php echo $form->textField($ticket,'awb'); ?>
        <?php echo $form->error($ticket,'awb'); ?>
    </div>

    <div>
        <?php echo $form->labelEx($ticket,'awb_date'); ?>
        <?php echo $form->textField($ticket,'awb_date'); ?>
        <?php echo $form->error($ticket,'awb_date'); ?>
    </div>


    <div class="buttons">
        <?php echo CHtml::submitButton($ticket->isNewRecord ? 'Create' : 'Save'); ?>
    </div>

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

</div><!-- form -->

Любая помощь очень ценится. Если вам нужна дополнительная информация, спрашивайте.


person Raven_ 007    schedule 25.11.2013    source источник
comment
что это за игра на панели задач?   -  person Developerium    schedule 25.11.2013
comment
Привет, это Battlefield 4.) Кстати, классная игра.   -  person Raven_ 007    schedule 26.11.2013
comment
Мне помог Raven_ 007, спасибо. Ты дал мне идею   -  person Jeff_Alieffson    schedule 18.09.2014


Ответы (3)


Измените код в нижнем колонтитуле модели, как показано ниже:

<div class="modal-footer">
<?php $this->widget('bootstrap.widgets.TbButton', array(
    'type'=>'primary',
    'label'=>'Save changes',
    'url'=>'#',
    'htmlOptions'=>array('onclick' => '$("#formID").submit()'),
)); ?>
<?php $this->widget('bootstrap.widgets.TbButton', array(
    'label'=>'Close',
    'url'=>'#',
    'htmlOptions'=>array('data-dismiss'=>'modal'),
)); ?>

person Thanh Khánh    schedule 25.11.2013
comment
Это сработало отлично. В моем случае я использовал имя класса для отправки формы, поскольку я хочу использовать один модальный файл для отображения и отправки нескольких форм. Ты классный, спасибо! - person Raven_ 007; 26.11.2013

Этот первый ответ не решил мою проблему закрытия модальной формы при отправке. Для всех, у кого есть проблемы, мне пришлось включить проверку клиента в CActiveForm.

В итоге это выглядело так:

$form = $this->beginWidget(
    'CActiveForm',
     array(
         'id' => 'feature-form',
         'enableAjaxValidation' => true,
         'enableClientValidation' => true,
         'clientOptions' => array(
             'validateOnSubmit' => true,
             'validateOnChange' => true,
             'validateOnType' => true
          )
        )
); 

Надеюсь, это поможет некоторым, кто придет после меня.

person Gideon Rosenthal    schedule 03.09.2014

просто запустите событие щелчка на другом, который вы не хотите показывать, а также сначала скройте его!

person Developerium    schedule 25.11.2013