自动完成文本字段CJuiAutoComplete小部件yii存储隐藏字段id和显示名称

自动完成文本字段CJuiAutoComplete小部件yii存储隐藏字段id和显示名称,autocomplete,yii,Autocomplete,Yii,我正在寻找自动完成的工作显示在自动完成文本字段的名称和存储隐藏的字段id值 当我检查网络时,我得到了名称和id。但是能够显示名称,但它没有为记录选择id,因此无法存储id 任何人都可以给我任何链接/代码,这是工作的自动完成。是否有任何正在运行的链接/代码 用于自动完成的类:: class EAutoCompleteAction extends CAction{ public $model; public $attribute; public $id; private $results = arr

我正在寻找自动完成的工作显示在自动完成文本字段的名称和存储隐藏的字段id值

当我检查网络时,我得到了名称和id。但是能够显示名称,但它没有为记录选择id,因此无法存储id

任何人都可以给我任何链接/代码,这是工作的自动完成。是否有任何正在运行的链接/代码

用于自动完成的类::

class EAutoCompleteAction extends CAction{
public $model;
public $attribute;
public $id;
private $results = array();
public $returnVal = '';
public function run()
{
    if(isset($this->model) && isset($this->attribute)) {
        $criteria = new CDbCriteria();
        $criteria->compare($this->attribute, $_GET['term'], true);
        $model = new $this->model;
        foreach($model->findAll($criteria) as $m)
        {
            $this->results[] = $m->{$this->attribute};
            $this->results[] = $m->{$this->id};
            //$this->results[] = array(
            //      'name' => $m->{$this->attribute},
            //      'id'=> $m->id
            //);


        }
    }

    echo CJSON::encode($this->results);
}
}
我使用的控制器/操作如下:

public function actions()
{
    return array(
        'aclist'=>array(
            'class'=>'application.extensions.EAutoCompleteAction',
            'model'=>'Organisation', //My model's class name
            'attribute'=>'name', //The attribute of the model i will search


        )


}
在我的视图form.php中

 <div class="row">
    <?php echo $form->labelEx($model,'organsiation'); ?>
    <?php echo $form->hiddenField($model,'organisation_id',array()); ?>
    <?php
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'attribute'=>'organisation_id',
'model'=>$model,
'sourceUrl'=>array('benefit/aclist'),
'value'=>'Please select',
'name'=>'name',
'id'=>'organisation_id',
'options'=>array(
    'minLength'=>'2',
     'select'=>"js:function(event, ui) {
 alert(ui.item.id);
                                    $('#organisation_id').val(ui.item.id);
                                    }",
),
'htmlOptions'=>array(
'size'=>45,
'maxlength'=>45,
),
)); ?>
<?php echo $form->error($model,'organisation_id'); ?>


在您的情况下,我会从简单的JQuery开始,而不是客户端的cUIAutoComplete。jQueryUIdocs有一个很好的演示,源代码在。有三个基本步骤可以让事情顺利进行:

  • 以JSON对象数组而不是字符串的形式提供数据

  • 使用自定义的
    \u renderItem
    函数将JSON对象呈现为可读字符串

  • 使用自定义
    select
    功能将所选JSON对象的可见
    name
    记录到文本字段中,并将该对象的
    id
    记录到隐藏字段中

  • 要执行步骤1,您需要取消注释EAutoCompleteAction的已注释部分,并删除其上方的两行。之后,您应该能够在
    alert()
    消息中看到项目id和名称

    第2步(覆盖
    \u renderItem
    )对于cguiautocomplete来说尤其棘手,这就是我建议使用普通jqueryui的原因。有关纯JQuery UI的示例,请参见。可以在Yii文档的注释部分找到CJuiAutoComplete的示例:。在第2步之后,您应该能够看到可读的自动完成建议

    要执行步骤3,您需要添加以下内容

    $('#organisation_name').val( ui.item.name );
    

    中选择
    功能,前提是
    组织机构名称
    是文本字段的id,
    组织机构id
    是隐藏表单字段的id(您需要进行一些更改才能这样做)。

    这里是我的自动完成代码

  • 创建一个返回json的操作

    public function listaItemMarcaAction(){
        $cmd = Yii::app()->db->createCommand();
        $cmd->select('id, nombre as value, nombre as label, pais_origen');
        $cmd->from('item_marca');
        $cmd->where('nombre like :term', array(':term'=>'%'.request()->getParam('term').'%'));
        $data = $cmd->queryAll();
        header('Content-type: application/json');
        echo CJavaScript::jsonEncode($data);
        Yii::app()->end();
    }
    
  • 创建自动完成字段和隐藏字段(在视图文件中,例如_form.php)


  • 您是否在警报(ui.item.id);?中收到任何信息??尝试调查console.log.no.中的“ui”对象。我也没有得到任何id。但是当我在chrome inspector/networks/response中检查时,我得到了值和id。那么你得到的是“ui.item”对象吗?你得到的响应是JSON。是吗?是的,得到杰森的回应。但我不理解ui.item。我还通过使用name1 | id1、name2 | id2、name3 | id3……,对数组响应进行了测试。。。。。。。格式。我在chrome/networks/response中得到了这些值格式,但在textfield nt拾取id时,这些值格式并没有出现,。
    <?php echo $form->labelEx($model,'marca_id'); ?>
    <?php echo $form->hiddenField($model,'marca_id'); ?>
    <?php $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
        'name'=>"Item[marca]",
        'value'=>$model->isNewRecord ? null : $model->marca->nombre,
        'sourceUrl'=>Yii::app()->createUrl('/item/listaitemmarca'),
        'options'=>array(
            'minLength'=>1,
            'change'=>'js:function(event,ui){fn_item_data(event,ui)}'
        ),
    )); ?>
    
    function fn_item_data(event,ui){
        if(!ui.item){
            $("#Item_marca_id").val("");
            $("#Item_marca").val("");
        }else{
            $("#Item_marca_id").val(ui.item.id);
            $("#Item_marca").val(ui.item.value);
            //and use ui.item.pais_origen for another things
            if(ui.item.pais_origen == 'EEUU') alert('ok');
        }
    }