将不在选择列表中的值输入到 jquery-select2 中

Posted

技术标签:

【中文标题】将不在选择列表中的值输入到 jquery-select2 中【英文标题】:Entering values into a jquery-select2 that are not in the select list 【发布时间】:2013-05-06 23:43:44 【问题描述】:

我有一个用例,我允许人们在select2 plugin 的文本框中键入未出现在选择列表中的值。

在一种情况下,我提供验证并且不提交,除非用户选择了有效的项目,但在他们这样做之前,我不想清除他们的值。选择框可能包含 1.00、1.50、1.75、NA、ABS 并且用户刚刚输入了 1.80。这是一个无效值,但我不想丢失他们的更改,我会将该框标记为无效并允许他们修复他们的更改。我不想将 1.80 添加到选择框,因为它是无效值,但我也不想清除它。

如何做到这一点?

【问题讨论】:

好问题。保留用户的过渡编辑并对其进行验证,是正确的数据处理。 从 4.0.0 开始,Select2 通过 $('xyz').select2(tags: true) 支持自定义值,不支持验证。但是,您可以格式化该值以指示它是无效的。请参阅***.com/a/30021059/192092。 【参考方案1】:

如果您在 JS 中进行验证,Select2 有一个动态加载/生成数据的示例,它会覆盖 query() 以重复用户的输入。

请参阅:http://ivaynberg.github.io/select2/“正在加载数据”

我用 JQuery UI 'autocomplete' 解决了一个类似的问题(服务器端)。在这里,我采用了返回对象的方法,其中包含一个带有可能解释性消息的 label、一个没有装饰的 text 值,以及一个组合的 ID 值和状态标志。我覆盖了 select 以将文本和 ID 存储到隐藏字段。

在我的例子中,我是区分 现有客户 以引用,或 创建一个新客户 与输入的名称。我能够很好地列出匹配现有客户或创建“ABC 新客户”的选项:

用户输入:“字母汤”并看到以下选项:

Alpha 包装 金宝汤 制作“字母汤”

类似的技术可能适用于您。希望这会有所帮助。

【讨论】:

我注意到通过使用这种方法我的ajax 实现被忽略了,有没有办法在query 执行之前或之后调用我的ajax 逻辑? @MaksimVi。 query 是基础数据源 API,ajax 是通用 AJAX/JSONP 数据源的快捷方式。它们是提供数据源的替代方法,显然 Select2 调用两者都没有意义!如果您想手动执行 AJAX,请将其放入您的 query 处理程序代码中。 @ThomasW 我只想重用ajax对象中提供的逻辑(手动调用)。 你的query 实现会很高兴看到!【参考方案2】:
$(document).ready(function() 
    var items = [id: "1", text: "some_available_text"];
    $("#hidden_input_for_select2").select2(
        query: function (query) 
            var data = results: [];
            if(query.term.length > 0)
                data.results.push(id: 0, text: query.term );
            
            $.each(items, function()
                if(query.term.length == 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0 )
                    data.results.push(id: this.id, text: this.text );
                
            );
            query.callback(data);
        
    );
);

【讨论】:

以上是关于将不在选择列表中的值输入到 jquery-select2 中的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL:如何在值列表中选择不在表中的值?

是否可以将列表中的值添加到输入表单字段?

将数据框中的值列表附加到新列[重复]

使用 Django 选择不在另一个表中的值

如何清除不在列表中的输入[重复]

更改不在索引列表中的 NumPy 数组的值