我使用Select2(版本3.4.0)来填充标签列表.标签通过ajax调用与现有标签进行匹配,我使用createSearchChoice来创建新标签.代码工作到目前为止,看起来像这样:
$(mytags).select2({
    multiple: true,placeholder: "Please enter tags",tokenSeparators: [ "," ],ajax: {
        multiple: true,url: myurl,dataType: "json",data: function(term,page) {
            return {
                q: term
            };
        },results: function(data,page) {
            return data;
        }
    },createSearchChoice: function(term) {
        return {
            id: term,text: term + ' (new)'
        };
    },});

除了在createSearchChoice中注明附加(新)外,所有这些都非常标准.我需要用户知道这不是一个预先存在的标签.

它按预期工作:如果我开始输入“new-tag”,我在列表顶部建立了“new-tag(new)”标签,如果我选择它,标签列表包含“new-tag(new )“,如预期.如果标签已经存在,则Select2检测到匹配项,并且不会创建“(new)”选项.按返回或点击匹配按预期工作.

当有匹配时,当我键入逗号(我的单个tokenSeparators条目)时出现问题. Select2关闭该令牌,并将该标签添加到列表中,但附加了“(new)”标签,即使用createSeachChoice的返回值即使不需要.

这是Select2中的错误,还是使用错误(应该怎么办)?

解决方法

我不知道这是否是一个错误 – 在任何情况下,在这个时候,GitHub问题跟踪器都没有提到这个行为的公开问题.

你可以自己修改自己的行为.这个想法是,createSearchChoice回调必须能够告诉术语是否指搜索结果.但是createSearchChoice不能直接访问搜索结果,那么我们如何才能实现呢?那么,通过从结果回调中保存最新的一批搜索结果.

var lastResults = [];

$(...).select2({
    ajax: {
        multiple: true,url: "/echo/json/",type: "POST",data: function (term,page) {
            return {
                json: JSON.stringify({results: [{id: "foo",text:"foo"},{id:"bar",text:"bar"}]}),q: term
            };
        },results: function (data,page) {
            lastResults = data.results;
            return data;
        }
    },createSearchChoice: function (term) {
        if(lastResults.some(function(r) { return r.text == term })) {
            return { id: term,text: term };
        }
        else {
            return { id: term,text: term + " (new)" };
        }
    }
});

该代码使用Array.some,所以你需要比IE8更好的(这是select2最低要求)来运行它,但当然可以模拟行为.

See it in action.

但是,在软膏中有一个飞行:只有当已经收到与当前搜索项对应的搜索结果时,此代码才能正常工作.

这应该是显而易见的:如果您输入的速度非常快,并创建一个与现有标签相对应的搜索字词,但在包含该标记的搜索结果到达之前点击逗号,createSearchChoice将测试标签在先前接收到的搜索结果中的存在.如果这些结果不包含标签,那么标签将被显示为“新”,即使不是.

不幸的是,我不相信有什么可以做,以防止这种情况发生.

jquery-select2 – Select2 with createSearchChoice使用新创建的键盘输入选项,即使给出匹配,错误还是我缺少某些东西?的更多相关文章

  1. jquery select2的使用心得(推荐)

    下面小编就为大家带来一篇jquery select2的使用心得(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)

    select2是一款jQuery插件,是普通form表单select组件的升级版。 接下来通过本文给大家介绍jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页),需要的的朋友参考下吧

  3. Vue.js监听select2的值改变进行查询方式

    这篇文章主要介绍了Vue.js监听select2的值改变进行查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  4. Select2在使用ajax获取远程数据时显示默认数据的方法

    今天小编就为大家分享一篇Select2在使用ajax获取远程数据时显示默认数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  5. php – 以Jquery select2形式发布POST

    所以我使用的是Select2插件,在表单中发布多个选项时遇到问题.我可以选择多个选项,但只能传递一个:在我的PHP页面上,当我选择多个选项后var_dump:我只得到一根绳子,即:我需要转到隐藏的输入格式吗?答案是在name属性之后加入[],这与插件几乎没有关系.

  6. php – 如何通过URL传递变量的多个值

    我正在构建一个应用程序,而且我遇到了某个问题.我正在尝试传递一个具有多个值的变量.所以我的网址将如下所示:问题是我不知道如何做到这一点.变量用于从数据库中检索数据.我正在使用PHP而没有Javascript.任何帮助都会很棒!

  7. 动态添加项目到使用AJAX的jQuery Select2控件

    我有一个jQuerySelect2控件使用AJAX来填充:AJAX链接到可能选项的数据库,并且您可以看到需要两个字符的输入。相同的确切代码适用于非AJAXSelect2框。我尝试了各种替代方法,如使用$。remove()只会删除原来的字段,但使Select2控件保持不变。任何想法如何a)动态添加一个选项到使用AJAX的Select2控件;或b)完全删除一个Select2控件,以便它可以以编程方式添加回来?编辑我发现另一个问题,显示如何删除select2元素,使用.select2。我更喜欢能够添加选项比销毁

  8. select2 ajax 设置默认值,初始值

    在做功能的时候需要修改数据,修改数据时需要显示原始值.但是在select2的时候显示原始值是一个非常非常非常非常非常要命的难题.研究了3个小时,最后使用$.ajax重新加载原始值.并显示.重点是下面的代码,再次加载默认值.赋值.主要是在select控件添加上option.具体是ajax加载的还是直接后台用代码生成的.都可以..最后用$select2.trigger;渲染到界面上..就可以了.

  9. php – 无法从select2搜索结果中选择一个结果

    我正在使用我的搜索框中的select2.我从我的网址获取结果,但我无法从中选择一个选项.我想使用’product.productName’作为选择后显示的文本.有没有我错过的东西,或者我所犯的任何错误.我已经包括select2.css和select2.min.js,jquery.js这是我的resut_object您缺少结果数据的id属性.Select2pluginswantsanidfieldo

  10. select2,利用ajax高效查询大数据列表可搜索、可分页

    select2是一款jquery插件,是普通form表单select组件的升级版。那么,现在让我们开始一段select2的奇幻之旅吧!设置class为js-data-example-ajax,页面加载时对该组件进行select2的初始化。href属性为ajax提供后台检索的URL。第二步、select2组件化,注释写得很详细了哦第三步、Java端接收参数并返回结果集,不用我强调,这步很重要接下来,把关键的源码贴出来,可能和你的项目不吻合,但可以参考。调查select2的源码可以知道。

随机推荐

  1. jquery-plugins – 是否可以使用猫头鹰旋转木马实现循环/无限轮播?

    我正在使用猫头鹰旋转木马,它的工作完美,除了它不支持循环/无限滚动.我没有搜索google和stackoverflow的想法,没有运气.有没有人在猫头鹰旋转木马上实现圆形/无限滚动?

  2. jQuery动态输入字段焦点

    我想使用以下jQuery向我的页面动态添加一个输入字段:在这样做之后,我希望输入字段具有闪烁的文本光标的焦点,所以我想在创建后立即输入.有人可以告诉我我该怎么办?

  3. jquery – 为什么$(window).height()这样错了?

    我试图获取当前浏览器的视口高度,使用但我得到的价值观太低了.当视口高度高达850px时,我从height()获取大约350或400像素的值.这是怎么回事?

  4. jquery – 如果在此div之外和其他draggables内部(使用无效和有效的还原选项),则可拖动恢复

    例如这样但是由于明显的原因,这不行.我可以说这个吗?

  5. 创建一个jQueryUI 1.8按钮菜单

    现在jQueryUI1.8已经出来了,我正在浏览更新,并且遇到了新的Buttonwidget,特别是SplitButtonwithadropdown的演示之一.这个演示似乎表明Buttonwidget可以在这里创建一个下拉菜单.作为讨论的问题,我想知道使用这个新的Button小部件来创建一个下拉菜单有什么方法.干杯.解决方法您必须在按钮下方列出一个列表,方式类似于此处为自动完成提供的演示:http

  6. 灰色divs使用JQuery

    我试图使用这个代码:为了淡出一大堆名为MySelectorDiv的div,唯一的是,它只会淡出第一个而不是所有的div,为什么呢?

  7. 使用jQuery动态插入到列表中

    我有两个订单列表在彼此旁边.当我从一个列表中选出一个节点时,我想按照字母顺序插入到另一个列表中.抓住的是我想要把一个元素放在另一个列表中,而不刷新整个列表.奇怪的是,当我插入到右边的列表中,它工作正常,但是当我插入到左边的列表中时,顺序永远不会出来.我也尝试将所有内容读入数组,并将其排序在一起,以防止children()方法没有按照显示顺序返回任何东西,但是我仍然得到相同的结果.这是我的jQuer

  8. 没有回应MediaWiki API使用jQuery

    我试图从维基百科获取一些内容作为JSON:但我没有回应.如果我粘贴到浏览器的地址栏,就像我得到预期的内容.怎么了?解决方法您需要通过添加&callback=?来触发具有$.getJSON()的JSONP行为?在querystring上,像这样:Youcantestithere.没有使用JSONP,你正在击中same-originpolicy,阻止XmlHttpRequest获取任何数据.

  9. jQuery Ajax请求每30秒

    我有这段代码,但是有些人在我的网站上的值可能会改变.我需要每30秒钟更新一次#financediv.这可以做吗解决方法您可以将代码放在单独的函数中,如下所示:然后每30秒建立一个定时器调用该函数:祝你好运!总结以上是DEVMAX为你收集整理的jQueryAjax请求每30秒全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  10. jquery – keypress事件在IE和Chrome中不工作,但在FF工作

    任何想法为什么会这样发生?我通常认为Chrome会更加宽容代码?这是我的按键键.我错过了什么吗?右图();和leftimage();是应该工作的功能,因为我在其他地方使用这些功能谢谢您的帮助!

返回
顶部