Javascript Yii增压器选择2-允许新值

Javascript Yii增压器选择2-允许新值,javascript,php,yii,jquery-select2,Javascript,Php,Yii,Jquery Select2,我使用Yii助推器中的Select2作为下拉列表。我想允许用户输入自己的值,但我不知道如何输入。我认为,这方面没有配置。我想我可能会尝试类似的方法,但我不知道在从php表单呈现select2时如何添加此javascript。有人能帮忙吗?谢谢我认为您可以在小部件的选项中添加一个javascript函数作为选项,方法是在其前面加上“js:”,例如: $this->widget( 'booster.widgets.TbSelect2', array( 'asDr

我使用Yii助推器中的Select2作为下拉列表。我想允许用户输入自己的值,但我不知道如何输入。我认为,这方面没有配置。我想我可能会尝试类似的方法,但我不知道在从php表单呈现select2时如何添加此javascript。有人能帮忙吗?谢谢

我认为您可以在小部件的选项中添加一个javascript函数作为选项,方法是在其前面加上“js:”,例如:

$this->widget(
    'booster.widgets.TbSelect2',
    array(
        'asDropDownList' => false,
        'name' => 'clevertech',
        'options' => array(
            'tags' => array('clever', 'is', 'better', 'clevertech'),
            'placeholder' => 'type clever, or is, or just type!',
            'width' => '40%',
            'tokenSeparators' => array(',', ' ')
            'createSearchChoice' => 'js:function(term, data) {
             if ( $(data).filter( function() {
               return this.text.localeCompare(term)===0;
             }).length===0) {
               return {id:term, text:term};
             }',
           }
        )
    )
);
为了进一步调试,如果打开TbSelect2.php,您可以看到它对选项的作用:

$options = !empty($this->options) ? CJavaScript::encode($this->options) : '';
如果转到CJavaScript::encode函数,您可以看到它的功能:

if(is_string($value))
{
    if(strpos($value,'js:')===0 && $safe===false)
        return substr($value,3);
    else
        return "'".self::quote($value)."'";
}

注意:我已经打开了Yii 1而不是2的CJavaScript::encode,但可能是相同的。

谢谢您的回复。这可能会起作用,但我收到错误“'createSearchChoice'在附加到元素时不允许用于Select2”。Yii可能正在对select not input元素应用Select2:(顺便说一句,我在使用asDropDownList True时遇到了一个类似的问题,自定义select2选项不允许我使用下拉列表,因此我切换到了隐藏输入,如果将asDropDownList设置为false,它不起作用吗?从代码中可以看出,它将使用隐藏字段。是的,当将asDropDownList设置为false时,它起作用,但我认为我不想将其用作DropDownList。没关系,我现在在标记模式下使用它,它还可以:-)您是如何切换到隐藏输入的?我单独使用select2插件,没有此扩展,所以我刚刚生成了一个带有ID的隐藏字段,并将select2应用于该ID。