Jquery DatePicker не скрывается после закрытия всплывающего окна - PullRequest
4 голосов
/ 30 марта 2012

В Yii у меня есть модальное всплывающее окно, использующее CJuiDialog, который является оберткой для диалога jquery. В этом диалоговом окне у меня есть CJuiDatPicker, который является оболочкой для инструмента выбора даты jquery.

Если я закрою диалоговое окно и затем открою новое диалоговое окно, средство выбора даты откроется и останется видимым. Если я закрою 2-е диалоговое окно, средство выбора даты останется открытым. Если я открою третье диалоговое окно, откроется второе средство выбора даты, которое останется открытым даже после закрытия диалогового окна.

Как я могу принудительно закрыть средство выбора даты? Или, возможно, более правильно, когда диалоговое окно открывается во второй или более раз, как я могу предотвратить его открытие предыдущего средства выбора даты?

Редактировать: код для просмотра указан ниже:

<?php echo CHtml::link('Add Purchase','#', 
array('onClick'=>'addTrans._addTrans_url="' . Yii::app()->createUrl('ortransaction/create',array('investment_id'=>$model->id,'type'=>OrTransaction::TYPE_BUY)) . '";{addTrans()};$("#dialogAddTrans").dialog("open");return false;'));?>

<?php $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
'id'=>'dialogAddTrans',
'options'=>array(
    'title'=>'Add Purchase',
    'autoOpen'=>false,
    'modal'=>true,
),
));?>

<div class="divForAddTrans"></div>

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

<script type="text/javascript">
//this is the magic that loads the form correctly
function addTrans()
{
    //public proprety
    var _addTrans_url;

    <?php echo CHtml::ajax(array(
        'url'=>'js:addTrans._addTrans_url',
        'data'=>"js:$(this).serialize()",
        'type'=>'post',
        'dataType'=>'json',
        'success'=>"function(data)
        {
            if(data.status =='failure')
            {
                $('#dialogAddTrans div.divForAddTrans').html(data.div);
                //here is the trick: on submit->once again, call this function
                $('#dialogAddTrans div.divForAddTrans form').submit(function(){addTrans(); return false;});
            }else{
                $('#dialogAddTrans div.divForAddTrans').html(data.div);
                setTimeout(\"$('#dialogAddTrans').dialog('close')\",3000);
            }
        } ",
    ))?>;

    return false;
}

1 Ответ

1 голос
/ 06 июня 2012

вы можете уничтожить содержимое диалога перед загрузкой / открытием диалога и заново загрузить содержимое

...