如果Selectize.js中尚未存在项目,则选择框并且ajax会更新新添加的项目

时间:2014-06-23 12:48:12

标签: jquery selectize.js

我在选择框中使用Selectize.js,我需要的是,如果某个项目不在我需要添加新项目的选项列表中。添加新项目时,我希望进行ajax调用以将新添加的项目更新到我的数据库。

在他们的documentiation中,它表示我们可以使用"创建"进行选择以添加项目。

  

create - 允许用户创建不在选项列表中的新项目。此选项可以是以下任何一项:" true" (默认行为)," false" (禁用),或接受两个参数的函数:"输入"和#34;回调"。应该使用选项的最终数据调用回调。

但是我无法理解如何在这里使用回叫。有人可以帮忙吗?

以下是我的内容示例,值是db中项目的ID。我想将新项目添加到db并返回值为db的id并填充并在选择框中选中。

<select name="fruits" id="fruits" placeholder="Select a fruit" >
    <option value="1">Apple</option>
    <option value="2">Orange</option>
    <option value="3">Mango</option>
    <option value="4">Grape</option>
</select>

<script>
    $(function(){
        $('#fruits').selectize({
            create:function (input, callback){

           }
        });
    });
</script>

4 个答案:

答案 0 :(得分:20)

实际上,您必须返回一个对象,其属性与labelField和valueField选项的名称相匹配:

<script>
    $(function(){
        $('#fruits').selectize({
            create:function (input){
               return { value:123, text:input};
           }
        });
    });
</script>

如果您需要执行远程操作,您可以像这样编码:

<script>
    $(function(){
        $('#fruits').selectize({
            create:function (input, callback){
                $.ajax({
                    url: '/remote-url/',
                    type: 'GET',
                    success: function (result) {
                        if (result) {
                            callback({ value: result.id, text: input });
                        }
                    }
                });
            }
        });
    });
</script>

答案 1 :(得分:5)

你必须调用回调,传递你的值:

$('#fruits').selectize({
    create:function (input, callback){
        callback({
            value: 123, // probably your ID created or something
            text: input
        });
    }
});

答案 2 :(得分:0)

Thanks a lot, @Corgalore. Its working for me like
$(function(){
        $('#desig').selectize({
            create:function (input, callback){
                $.ajax({
                    url: "<?php  echo $this->url(null, array('controller' => 'employee-detail', 'action' => 'add-new-desig-ajax'));?>",
                    type: 'POST',
                    data:{'designation':input},
                    success: function (result) {
                        if (result) {
//                            console.log('sdfasf',result);
                            callback({ value: result.id, text: input });
                        }
                    }
                });
            }
        });
    }); 

答案 3 :(得分:0)

该函数可以采用以下两种形式之一:同步(带有签名函数(输入){}或异步(带有签名函数(输入,回调){})

当我们使用异步方法时,我们使用回调

<script>
    $(function(){
        $('#fruits').selectize({
            create:function (input, callback){
                //we return the callback that expects us to pass the parameters 
                //to it when the ajax finishes
                if (!input.length) return callback();
                $.ajax({
                    url: '/remote-url/',
                    type: 'GET',
                    success: function (result) {
                        if (result) {
                            callback({ value: result.id, text: input });
                        }
                    }
                });
            }
        });
    });
</script>

当我们使用同步方法时

<script>
    $(function(){
        $('#fruits').selectize({
            create:function (input){
                return { value: input, text: input };
            }
        });
    });
</script>