selectize设置由远程数据填充的select的默认值

时间:2016-11-04 14:37:33

标签: php jquery selectize.js

之前回答中提供的所有其他类似相关解决方案对我不起作用,所以请您协助吗?

简单地说:

创建页面:从下拉列表中选择选项。 ID将保存到DB

编辑页面:下拉列表必须使用DB中的ID

默认为选项

代码:

$("#vehicle_id").selectize({
    valueField: "id",
    labelField: "vehicle_model",
    searchField: "vehicle_model",
    options: [],
    create: false,
    render: {
        option: function(item, escape) {
            return "<div>" +
                        "<span class=title>" +
                            "<span class=renderline1><b>" + escape(item.vehicle_model) + "</b></span>" +
                            "<span class=renderline2>" + escape(item.vehicle_derivative) + "</span>" +
                        "</span>" +
                    "</div>";
        }
    },
    load: function(query, callback) {
        if (!query.length) return callback();
        $.ajax({
            url: "ajax.php",
            type: "post",
            dataType: "json",
            data: {
                a: "search",
                term: query
            },
            error: function() {
                callback();
            },
            success: function(res) {
                callback(res);
            }
        });
    }
});

$("#vehicle_id")[0].selectize.setValue(165);

ajax.php返回:

[{"id":"165","vehicle_model":"KIA","vehicle_derivative":"Cerato"},{"id":"786","vehicle_model":"KIA","vehicle_derivative":"Rio"}]

问题1: 为什么setValue不起作用?据我所知,这会根据远程数据填充选项。所以肯定,setValue不起作用,因为在页面加载时,没有选项可以开始。那么我需要先添加备注吗?但那么从ajax返回的实际选项会不会这么乱?这非常令人困惑:/

问题2: 您会注意到json每辆车返回3件物品,ID,型号,衍生物。 选择某个项目时,如何设置labelField以同样的方式显示模型/衍生物。

1 个答案:

答案 0 :(得分:0)

回答1:我认为只有在有一些选项时才应设置值。您可以在从服务器返回一些选项后设置值。

回答2:使用item对象中的render功能,就像使用option一样。

会是这样的:

...
render: {
    option: function (item, escape) { ... },
    item: function (item, escape) {
        return "<div>" +
                    "<span class=title>" +
                        "<span class=renderline1><b>" + escape(item.vehicle_model) + "</b></span>" +
                        "<span class=renderline2>" + escape(item.vehicle_derivative) + "</span>" +
                    "</span>" +
                "</div>";
    }
}