Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改select2 ajax标记中的选项数据值_Javascript_Jquery_Jquery Select2 - Fatal编程技术网

Javascript 更改select2 ajax标记中的选项数据值

Javascript 更改select2 ajax标记中的选项数据值,javascript,jquery,jquery-select2,Javascript,Jquery,Jquery Select2,我有使用ajax的select2标记方法的代码: json数据: [ { "id": "5", "text": "laravel3" }, { "id": "4", "text": "laravel2" } ] 代码: 使用我的代码,我可以从数据库中搜索和选择数据,或将新标记添加到我的select2区域。现在,当我从数据库中选择数据时,是数据id,但当我添加新标记时,是nametext,如下所示:

我有使用ajax的select2标记方法的代码:

json数据:

[
    {
        "id": "5",
        "text": "laravel3"
    },
    {
        "id": "4",
        "text": "laravel2"
    }
]
代码:

使用我的代码,我可以从数据库中搜索和选择数据,或将新标记添加到我的select2区域。现在,当我从数据库中选择数据时,是数据id,但当我添加新标记时,是nametext,如下所示:

现在,我需要将选项值get database data从data id更改为data name text。如何将选项数据值从id更改为名称

更新:我为文档添加了更多的背景和引用,并像文档一样将JSFIDLE切换为使用$.map

文件中描述了:

Select2需要非常特定的数据格式[…]Select2要求每个对象包含一个id和一个文本属性。[…]Select2从数据对象的id属性生成value属性

这些文件还描述了:

如果使用id以外的属性(如pk)来唯一标识选项,则需要将旧属性映射到id,然后再将其传递给Select2。如果无法在服务器上执行此操作,或者API无法更改,则可以在将其传递给Select2之前在JavaScript中执行此操作

在您的例子中,这意味着转换从AJAX调用返回的数据,以便每个结果的id元素实际上是文本值

你可以用它来做。要像文档一样使用$.map执行此操作,请执行以下操作:

processResults: function (data) {
    return {
        // Transform data, use text as id
        results: $.map(data, function (obj) {
            obj.id = obj.text;
            return obj;
        })
    };
}
这是一个例子。注意,我已经将其设置为使用JSFiddle的/echo/json异步选项模拟真实的AJAX请求

下面是生成的源代码的屏幕截图,显示了添加的标记和通过AJAX检索到的标记的值,它们是名称文本:

试试这个:

ajax: {
    url: '/tags/find',
    dataType: 'json',
    data: function (params) {
        return {
            q: $.trim(params.term)
        };
    },
    //updated 
    processResults: function (data) {
        var newData = [];
        $.each(data, function (index, item) {
            newData.push({                        
                    id: item.id, //id part present in data                        
                    text: item.text //string to be displayed
            });
        });
        return { results: newData };
    },
    //
    delay: 250,
    cache: true
}

您如何将newtag选项添加到select2下拉列表中?@Terry newtag键入一个newtag,然后在使用选择框时输入…@LaraBell?。。它可能正在向服务器提交数据,对吗?…此时您需要id而不是文本…所以将id保存为值更好。
ajax: {
    url: '/tags/find',
    dataType: 'json',
    data: function (params) {
        return {
            q: $.trim(params.term)
        };
    },
    //updated 
    processResults: function (data) {
        var newData = [];
        $.each(data, function (index, item) {
            newData.push({                        
                    id: item.id, //id part present in data                        
                    text: item.text //string to be displayed
            });
        });
        return { results: newData };
    },
    //
    delay: 250,
    cache: true
}