Jquery Chosen插件 - 通过Ajax动态填充列表

6 浏览
0 Comments

Jquery Chosen插件 - 通过Ajax动态填充列表

我正在尝试使用Chosen插件构建我的下拉菜单,用于多选

以下是我所基于的行为:

http://jsfiddle.net/JfLvA/

所以,我不想在我的选择框中硬编码3个

因此,如果用户输入"car",我通过ajax调用发送这个字母,然后我会得到一个类似于以下的数组:

[{"id":"2489","name":"carrie"},{"id":"2490","name":"Caroline"},{"id":"2491","name":"Carole"}]

代码:

$(function() {
$(".chzn-select").chosen();
$(".chzn-select-deselect").chosen({allow_single_deselect:true});
$('.chzn-choices input').autocomplete({
   source: function( request, response ) {
      $.ajax({
          url: "/change/name/autocomplete/"+request.term+"/",
          dataType: "json",
          success: function( data ) {
             response( $.map( data, function( item ) {
                $('ul.chzn-results').append('
  • ' + item.name + '
  • '); } }); } });

    结果:

    我输入"car",在下拉菜单中得到"未找到car的结果",然后我得到了所有我想要的结果。

    1. 为什么我会得到"未找到结果"的消息,因为我可以在我的json数组和列表中看到我得到了结果。

     -----------------------------
    

    当我删除"car"并输入"sam"时,"sam"的结果会显示在"car"的结果之后。(基本上,我同时看到了两个结果,而不仅仅是我当前搜索的结果)

    2. 我是否应该在keyUp时清除ul?我认为插件已经做到了这一点

     -----------------------------
    

    当我点击一个名字来实际选择它并将其添加到选择框中时,我在chosen.js文件中得到一个javascript错误

    item is undefined

    "item.selected = true;" line 732

    插件的链接:

    http://harvesthq.github.com/chosen/chosen/chosen.jquery.js

    它没有在选择框中添加任何内容。

    3. 不知道为什么会发生这种情况

     -----------------------------
    

    你们有任何关于我做错了什么的想法吗?我完全陷入了困境...!

    哦,顺便说一下,我不介意改变插件源代码,因为这是我唯一使用它的地方...

    0
    0 Comments

    问题的出现原因是因为之前的解决方法已经无效,需要更新使用新的方法。解决方法是使用新的方法代替已经过时的"success"事件,使用.done()方法来处理Ajax的响应。代码中使用了JQuery Chosen插件来动态地通过Ajax填充列表。具体的解决方法是在源URL中添加请求的term,然后将返回的数据映射为option元素添加到选择输入字段的select元素中,并通过.trigger("chosen:updated")方法更新Chosen插件。

    其中$("#CHOSEN_INPUT_FIELDID")是一个输入字段的ID。它是你在使用Chosen插件时使用的元素的ID。例如,$("#CHOSEN_INPUT_FIELDID").chosen(...)。至少从这段代码中看起来是这样的。

    0
    0 Comments

    问题的出现原因是使用了错误的类名来选择元素,导致无法正确找到要操作的元素。解决方法是将代码中的类名"chzn-results"替换为"chosen-results"。

    尝试以下代码:

    $('.chzn-choices input').autocomplete({
      source: function( request, response ) {
        $.ajax({
          url: "/change/name/autocomplete/"+request.term+"/",
          dataType: "json",
          beforeSend: function(){$('ul.chzn-results').empty();},
          success: function( data ) {
            response( $.map( data, function( item ) {
              $('ul.chzn-results').append('
  • ' + item.name + '
  • '); })); } }); } });

    是的,这种方式干净地解决了我的第二个问题。谢谢!那么,你对于第三个问题有什么想法吗?插件自身内部的 JavaScript 错误是怎么回事?

    嘿,我觉得问题不在插件上。这里的问题是item未定义。你能告诉我你何时使用autocomplete,何时使用chosen吗?

    你是什么意思?我在autocomplete上使用了chosen $('.chzn-choices input').autocomplete({,并在文档加载完成后实现了chosen $(function() { $(".chzn-select").chosen(); 我在上面贴出了全部代码。

    我不明白为什么这个回答被接受。这对你真的有效吗?chosen库抛出了以下异常"Cannot call method 'lastIndexOf' of undefined"。

    新版本将类名从"chzn-results"改为"chosen-results"。

    当选择一个选项时,这会给我一个"Uncaught TypeError: Cannot read property 'substr' of undefined"的错误。

    0
    0 Comments

    原因:问题的出现是因为回答者提到了另一个插件Select2,而不是直接回答问题关于Jquery Chosen插件如何通过Ajax动态填充列表的方法。

    解决方法:回答者应该直接回答问题并提供关于Jquery Chosen插件如何通过Ajax动态填充列表的方法,而不是提到另一个插件。如果有必要,可以在评论中提及其他插件作为替代方案。

    以下是一种可能的解决方法:

    // 创建一个空的下拉列表
    var select = $("");
    // 发送Ajax请求获取数据
    $.ajax({
      url: "your-api-url",
      method: "GET",
      success: function(response) {
        // 遍历数据并添加到下拉列表中
        for(var i = 0; i < response.length; i++) {
          var option = $("").text(response[i].name).val(response[i].id);
          select.append(option);
        }
        
        // 将下拉列表添加到页面中的某个元素中
        $("#your-element").append(select);
        
        // 初始化Chosen插件
        select.chosen();
      },
      error: function() {
        // 处理错误情况
      }
    });
    

    以上代码会发送一个Ajax请求到指定的API URL,并在成功响应后遍历数据并将其添加到一个空的下拉列表中。然后,将该下拉列表添加到页面中的指定元素中,并使用Chosen插件对其进行初始化。

    希望这个解决方法能够帮助到你。

    0