一个事件干扰了 Select2 插件的 ajax 检索结果

Posted

技术标签:

【中文标题】一个事件干扰了 Select2 插件的 ajax 检索结果【英文标题】:An event is interfering with Select2 plugin's ajax-retrieved results 【发布时间】:2012-12-21 00:51:09 【问题描述】:

我正在使用 Igor Vaynberg 的 Select2 jQuery 插件和 Infinite Scroll with Remote Data 选项为我的网站创建一个自动完成搜索框。 AJAX 运行良好,结果显示出来了,但它们是不可选择的 - 永远不会触发更改事件,当您单击结果时,什么也不会发生。

Chrome 控制台中也没有显示任何错误,所以我认为这不是语法错误,而是插件将其误认为是禁用的选择框。 编辑: 为结果列表尝试了一个单独的点击事件,但也从未被触发,我现在很确定有什么东西干扰了这些事件。

这是我目前的代码,

// Search
$("#site-search").select2(
    placeholder: "Search posts",
    minimumInputLength: 3,
    ajax: 
        url: "http://localhost/mysite/search",
        dataType: 'json',
        quietMillis: 500,
        data: function (term, page) 
            return 
                q: term,
                page_limit: 10,
                page: page // page number
            ;
        ,
        results: function (data, page) 
            var more = (page * 10) < data.length; // whether or not there are more results available

            // return the value of more to tell if more results can be loaded
            return results: data, more: more;
        
    ,
    formatResult: function(post) 
        // return html markup for individual result item
        markup = '<img src="'+post.image+'" style="width:40%;float:left;margin-right:5px">';
        markup += '<p>'+post.title+'</p>';
        markup += '<div class="clearfix"></div>';
        return markup;
    ,
    formatSelection: function(post) 
        // This shows up in the select box
        return post.title;
    ,
    dropdownCssClass: "bigdrop" // apply css that makes the dropdown taller
).on('change', function(e) 
    try 
        var slug = e.val.slug;
        window.location.href = "http://localhost/mysite/posts/"+slug;
     catch(error) 
        console.log('Selected search result is invalid: ');
    
);

选择框本身只是一个输入,类型为:隐藏

<input type="hidden" class="bigdrop" id="site-search" style="width:100%;height:auto">

【问题讨论】:

我尝试在更改事件的开头放置一个 console.log,但它从未被触发。 我在本地使用 twitter json api 尝试了您的代码,效果非常好。也许,另一个事件侦听器阻止运行此更改事件侦听器。你能在互联网上展示一个运行 ajax 数据示例的工作示例吗? @MuratÇorlu 我已经把它暂时放在indiewebseries.com。它是右侧边栏顶部的搜索栏。 @MuratÇorlu 我认为您可能对某处的另一个事件监听器是正确的。我刚刚尝试添加一个单独的 jquery onclick 事件以在单击结果时触发,并且它也没有被触发。知道如何找到干扰事件吗? 【参考方案1】:

您的问题似乎是,您的结果数据没有名为“id”的属性。 Select2 plugins wants an id field 在数据上,如果没有,它使选项“不可选择”。您可以提供一个 id 函数来覆盖此行为:

$("#site-search").select2(
   id: function(obj) 
      return obj.slug; // use slug field for id
   ,
   ...

【讨论】:

我现在正在检查这个,我从来没有在任何地方的文档中看到过这个! 就是这样!非常感谢你。我会在一小时内奖励你赏金。 我通过谷歌搜索“select2 unselectable”找到了这个,这绝对是我的问题的解决方案......感谢 Murat......

以上是关于一个事件干扰了 Select2 插件的 ajax 检索结果的主要内容,如果未能解决你的问题,请参考以下文章

Select2 用于创建新标签的事件

Yii2 - 使用 Ajax 加载为 Select2 插件设置值

如何使用配置了ajax搜索的select2 jquery插件实现选择所有功能。?

ajax调用HTML内容更改后select2 jquery插件不起作用

在 select2 插件中调用 ajax 时引入延迟

使用 ajax 的 Select2 被 Rails turbolinks 事件初始化了几次