当值与显示值不同时,标签上的Select2错误

时间:2017-09-22 09:57:29

标签: javascript jquery html jquery-select2

假设我有这个选择框:

<select id="example" multiple="multiple" style="width: 300px">
    <option selected value="1">January</option>
    <option value="2">February</option>
    <option value="3">March</option>
    <option value="4">April</option>
    <option value="5">May</option>
    <option value="6">June</option>
    <option value="7">July</option>
    <option value="8">August</option>
    <option value="9">September</option>
    <option value="10">October</option>
    <option value="11">November</option>
    <option value="12">December</option>
</select>

为了与网站的许多其他部分进行通信,无法更改该值。这仅用于演示示例,实际用例更复杂,显示值需要与将要提交的实际表单值不同。

要允许自动填充并添加新标记,请使用select2。

$('#example').select2({
    placeholder: 'Select a month',
    tags: true,
    tokenSeparators: [',', ' ']
});

JS fiddle for demo

问题在于,当键入完整的月份名称(例如“1月”),然后按空格键,而不是选择现有的“1月”选项(这是我所期望的)时,它只是创建一个值为{的新标签{1}}。

经过一些重复测试,我发现只有当实际值与显示值不同时才会发生这种情况。有没有办法可以保持两个值不同但是选择已存在的选项?

2 个答案:

答案 0 :(得分:1)

通过搜索匹配来利用createTag事件。

如果没有匹配项,并且由于您不想添加新标记,只需返回null

var options = $('#example option');

$('#example').select2({
  placeholder: 'Select a month',
  tags: true,
  tokenSeparators: [',', ' '],
  createTag: function(params) {    
    var matchedVal = options.filter(function () { return $(this).html() === params.term; }).val();    
    return (matchedVal) ? { id: matchedVal, text: params.term } : null
  }
});

演示:https://jsfiddle.net/2yu87gyf/

修改

根据您的评论,如果标记尚不存在,请创建标记 - 请改用此return语句:

return (matchedVal) ? { id: matchedVal, text: params.term } : { id: params.term, text: params.term }

创建无与伦比的代码演示:https://jsfiddle.net/2yu87gyf/1/

答案 1 :(得分:0)

试试这个

删除标记选项,因为它会动态创建新标记

IEnumerator WWWClass()
    {
        string url1 = "xyz.com";
        string url2 = "xyzzz.com";
        WWW www = new WWW(url);
        yield return www;
        if (www.error == null)
        {
            //sucess
        }
        else {
            //unscuess
            www = new WWW(url2);
            yield return www;
            if (www.error == null)
            {
                //sucess
            }
            else {
                //unscuess
            }
        }
    }