我在一个选择框中使用Selectize.js,我需要的是,如果一个项目不在选项列表中,我需要添加一个新项目。当新项目被添加,我想有一个ajax调用更新新添加的项目到我的数据库。
在他们的文档中,它说我们可以使用"create"来选择添加项。
create -允许用户创建一个不在选项列表中的新项目。该选项可以是以下任意选项:"true"(默认行为),"false"(禁用),或者一个接受两个参数的函数:"input"one_answers"callback"。回调函数应该使用该选项的最终数据来调用。
但是我不明白如何在这里使用调用。有人能帮忙吗?
下面是我的内容的一个例子,值是db中项目的id。我想有新的项目添加到db和返回值作为id从db和填充,并在选择框中选择。
<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>
实际上,您必须返回一个具有与您的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>
您必须调用回调,传递您的值:
$('#fruits').selectize({
create:function (input, callback){
callback({
value: 123, // probably your ID created or something
text: input
});
}
});
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 });
}
}
});
}
});
});
函数有两种形式:同步(带签名函数(输入){}或异步(带签名函数(输入,回调){}
当我们使用异步方法时我们使用回调
<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>