不能使用多个ajaxLink来加载CJuiDialog小部件

时间:2012-02-15 12:30:05

标签: ajax widget yii jquery-ui-dialog

在yii中使用多个ajaxLink加载CJuiDialog小部件时遇到问题。我正在使用多个下拉列表,每个下拉列表的值确定下一个下拉列表。

以下是我查看第一个下拉列表的代码以及使用Cdialog小部件创建新项目的链接。

    <?php $cs = Yii::app()->getClientScript();
    $cs->registerCoreScript("jquery");
     ?>
  <div class="form">
     <?php $form=$this->beginWidget('CActiveForm', array(
    'enableAjaxValidation'=>false,
     )); ?>
   <div class="row">
            <?php
            echo $form->labelEx($model,'uname'); ?>
            <?php echo $form->dropDownList($model,'uname',$model-         >getUniversityList(),array('onchange'=>'getSchemes(this.value)','empty'=>'Select university')); ?>
            <?php echo $form->error($model,'uname'); ?>
          <?php //create university dialoge box
                  if(!Yii::app()->user->isGuest) 
                   {
                         echo CHtml::ajaxLink('create new university',array('university/dialoge'),array(
              'success'=>'js:function(data){
             $("#createUniversity").dialog("open");
              document.getElementById("create_university").innerHTML=data;
                              }'));
             $this->beginWidget('zii.widgets.jui.CJuiDialog',array(
              'id'=>'createUniversity',
              'options'=>array(
                'title'=>'Create University',
                'autoOpen'=>false,
                'modal'=>'true',
                'width'=>'auto',
                'height'=>'auto',
            ),
            ));
           echo "<div id='create_university'></div>";
                          $this->endWidget('zii.widgets.jui.CJuiDialog');
            }
?>
       <div id="scheme">
      </div>
       </div>
<?php $this->endWidget(); ?>
</div>
<input type="hidden" id="url" value="<?php echo $this->createUrl('scheme/test'); ?>">

这非常好。

这是用于在同一视图文件中加载下一个下拉列表的JavaScript代码

<script type="text/javascript">
   function getSchemes(uid)
   {
  if(uid==""){
 document.getElementById("scheme").innerHTML='';
   return;
   }
   jQuery(function($){

 var url=document.getElementById("url").value;
 $.post(url, { uid:uid },
 function(data){
 document.getElementById("scheme").innerHTML=data; 
    document.getElementById("scheme_link").style.display="block";

});
 });
}

方案下拉列表已加载,方案视图代码为

 <?php $cs = Yii::app()->getClientScript();
   $cs->registerCoreScript("jquery");
   ?>
  <?php
    echo "<div class=".'label'."><label for=".'sch'.">Scheme</label></div>";
    echo "<select id=".'sch'." onchange='getDepartments(this.value);'>";
     echo "<option value=".''.">"."Select Scheme</option>";
            foreach($schemes as $s)
             {
             echo "<option value='".$s->schemeid."' >".$s->scheme_name."</option>";
             }
             echo "</select>";
       ?>
    <?php
        if(!Yii::app()->user->isGuest) 
        {
                         echo CHtml::ajaxLink('create new             Scheme',array('scheme/dialoge','id'=>5),array(
              'success'=>'js:function(data1){
             $("#createScheme").dialog("open");
              document.getElementById("create_scheme").innerHTML=data;
                              }'));?>
                              <?php
                              $this->beginWidget('zii.widgets.jui.CJuiDialog',array(
              'id'=>'createScheme',
              'options'=>array(
                'title'=>'Create Scheme',
                'autoOpen'=>false,
                'modal'=>'true',
                'width'=>'auto',
                'height'=>'auto',
            ),
            ));
           echo "<div id='create_scheme'></div>";
                          $this->endWidget('zii.widgets.jui.CJuiDialog');
            } 
    ?>
    <div id="department">
    </div>
   <input type="hidden" id="urldepart" value="<?php echo $this->createUrl('department/test'); ?> ">

第二个ajaxLink显示为创建新方案,但在点击链接时显示旧的创建大学对话框而不是创建方案。

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是创建导致问题随机的元素的ID。 尝试添加:

'id' => 'some-element'.uniqid() // avoid mutliple ajax request because of using live

在ajaxLink的$ htmlOptions数组中