2014-01-28 99 views
3

我有一个Yii下拉列表和文本框,当我选择下拉列表项时,这个名字应该显示在文本框中。我尝试使用ajax这个概念,但它更新后页面刷新only.I已粘贴我的代码在这里,请透视,并建议我如何设置 textfield后立即选择下拉列表项目。如何在没有刷新页面的情况下更新dropdownlist的textfield onchange?

The following code resides protected/views/form 

    <td>  
    <?php echo $form->labelEx(ScriptQuestion::model(),'Field'); ?></td><td> 
    <?php echo CHtml::activedropDownList(ScriptQuestion::model(),'crm_base_contact_form_field_id',$select_field,  
       array(
       'id' => 'send_bcfield', 
       'class' => 'col_165', 
       'ajax' => array(
        'type' => 'POST', 
        'url' => CController::createUrl('DisplayMessage'),                
        'update' => '#question_editor', 
        'data' => array('bcfield' => 'js:this.value'), 
        'success'=> 'function(data) {$("#question_editor").empty(); 
          $("#question_editor").val(data); 
          } ',      
        ))  
    ); ?>    
    </td> 
     <td> 
     <?php echo $form->textArea($model, 'message', array('id'=>'question_editor','maxlength'=>508,)); ?> 
      </td> 

这是控制器动作:

public function actionDisplayMessage(){ 
$q = $_POST['bcfield']; 
$model=ScriptQuestion::model()->findAll(); 
$sql = "SELECT name FROM crm_field WHERE crm_field_id=". $q ; 
    $command = Yii::app()->db->createCommand($sql); 
    $result= $command->queryScalar(); 
    echo "%".$result."%"; 
    $this->performAjaxValidation($model);  
    } 
+0

你必须发送Ajax请求'onchange' –

+0

你的意思是不是成功的onchange? – Bala

+0

尝试在'成功'部分提醒'数据',并告诉我它是什么 –

回答

2

无需阿贾克斯,它只是一个简单的JavaScript /jQuery的

只是这样做(与你的CKEditor的实例名称替换editor1):

<script> 
$("#send_bcfield").change(function(){ 
    var selected = $("#send_bcfield option:selected").val(); 
    CKEDITOR.instances.editor1.setData(selected); 
}); 
</script> 

或者你的代码改成这样:

<?php 
echo CHtml::activedropDownList(ScriptQuestion::model(), 'crm_base_contact_form_field_id', $select_field, array(
    'id' => 'send_bcfield', 
    'class' => 'col_165', 
    'onchange' => '$("#send_bcfield").change(function(){ 
        var selected = $("#send_bcfield option:selected").val(); 
        CKEDITOR.instances.editor1.setData(selected); 
        });', 
    ) 
); 
?> 

更新:我改变了我的代码改变CKEditor的值根据您的评论我的答案。

+0

我试过这个,但不起作用。页面刷新后也会更改。这个文本字段ID“question_editor”的一件事与CKEDITOR集成在一起。这是否会导致问题? – Bala

+0

也许,试着把一个简单的textarea与'id ='question_editor'' –

+0

是的,如果我试过简单的文本区域,这将得到更新的下拉列表项目的选择。但是我可以用ckeditor做什么?请帮我实现这一点。我需要与ckeditor文本区域 – Bala

1

可能你只需要它添加到了CHtml :: activedropDownList设置:

'onchange' => "$('question_editor').val($('#send_bcfield option:selected').text())" 
+0

我回答的确实和你一样,但是我读了最后一个问题的一部分,我发现OP不希望在textarea中显示selectbox的确切值。他想在查询等后将其更改并删除我的答案 –

+0

'当我选择下拉列表项目时,此名称应显示在textfield.'如果不是这样我不确定我应该说什么 – sakhunzai

+0

I知道,他问这个问题awefull,我取消了我的答案 –

相关问题