【问题标题】:Uncaught TypeError: Cannot set property 'selected' of undefined chosen jquery未捕获的类型错误:无法设置未定义选择的 jquery 的属性“选择”
【发布时间】:2018-10-22 07:15:44
【问题描述】:

当从 Ajax 获取数据到选择下拉列表中时。在下拉列表中选择特定值时出错。

未捕获的类型错误:无法设置未定义的属性“已选择”
在 Chosen.result_select (chosen.jquery.js:1158)
在 Chosen.search_results_mouseup (chosen.jquery.js:1059)
在 HTMLUListElement。 (chosen.jquery.js:739)
在 HTMLUListElement.dispatch (jquery-2.2.3.min.js:3)
在 HTMLUListElement.r.handle (jquery-2.2.3.min.js:3)

$(document).ready(function(){
    $("#shopSelect .chosen-search-input").keyup(function(){
        var key = $('#shopSelect .chosen-search-input').val();
        if(key){
            $.ajax({
                url: '<?php echo base_url("admin/shopSearch"); ?>',
                data: {key:key},
                type: 'POST',
                dataType: "json",  
                cache:false,
                success: function (data) {
                    $('#shopSelect ul.chosen-results').empty($("#shopSelect ul.chosen-results").append("<li class='disabled-result result-selected' data-option-array-index='0'>Select One</li>"));
                    data.forEach(function(entry) {
                        $("#shopSelect ul.chosen-results").append("<li class='active-result' data-option-array-index='"+entry.id+"'>"+entry.name+"</li>");
                    });
                }, error: function (err) {
                    if (typeof (failure) == 'function') {
                        console.log(err)
                    }
                }
            });
            $("#shopSelect .active-result").keyup(function(){
                $("#shopSelect ul.chosen-results").trigger("chosen:updated");       
            });
        }
    });
});

但是当我在没有 Ajax 的情况下使用时。给静态下拉选项值它的工作完美。我正在使用chosen

<select name="shops" id="shops" class="form-control chosen-select" tabindex="2" style="width: 100%;">
    <option selected="" value="" disabled="">Select One</option>
    <option value="1">OptionOne</option>
    <option value="2">OptionTwo</option>
    <option value="3">OptionThree</option>
</select>

【问题讨论】:

  • 目前尚不清楚确切的问题是什么,但是您在keyup 事件处理程序中附加了keyup 事件处理程序,这似乎是个坏主意。查看事件委托。
  • 我们可以看到你的ajax请求的结果吗?
  • 另外,empty 不会对您传递给它的参数做任何事情。
  • 尝试在你的 ajax 成功回调中初始化选择。
  • 我很确定你不能初始化一个插件然后编辑它的数据。在这种情况下,您应该:获取远程数据 => 填充列表 => 初始化 Chosen 插件。还要在$.ajax 调用上使用async,并且不要将keyup 处理程序附加到另一个处理程序中(正如@RoryMcCrossan 指出的那样)。 PS检查Chosen插件是否有可能自行加载远程数据,否则请查看Select2Select2与Chosen类似但功能更好

标签: javascript jquery html


【解决方案1】:

您必须将以下代码更改为

 $("#shopSelect ul.chosen-results").append("<li class='active-result' data-option-array-index='"+entry.id+"'>"+entry.name+"</li>"); 

 $("#shopSelect ul.chosen-results").append('<option value="entry.id">entry.name</option>');

然后在你的ajax成功中调用选择的触发器更新

所以整个代码看起来像

$(document).ready(function(){
    $("#shopSelect .chosen-search-input").keyup(function(){
        var key = $('#shopSelect .chosen-search-input').val();
        if(key){
            $.ajax({
                url: '<?php echo base_url("admin/shopSearch"); ?>',
                data: {key:key},
                type: 'POST',
                dataType: "json",  
                cache:false,
                success: function (data) {
                                 $('#shopSelect ul.chosen- 
                                 results').empty($("#shopSelect ul.chosen- 
                                 results").append("<li class='disabled-result 
                                 result-selected' data-option-array- 
                                 index='0'>Select One</li>"));
                    data.forEach(function(entry) {
                       $("#shopSelect ul.chosen-results").append("<li 
                       class='active-result' data-option-array- 
                       index='"+entry.id+"'>"+entry.name+"</li>"); 

                       $("#shopSelect ul.chosen-results").append('<option 
                       value="entry.id">entry.name</option>');
                    });
                     $("#shops").trigger("chosen:updated");
                }, error: function (err) {
                    if (typeof (failure) == 'function') {
                        console.log(err)
                    }
                }
            });

        }
    });
});

如果您正在寻找已选择的自动建议选项,请使用 this 示例。

【讨论】:

  • 当我使用静态选择选项时,它的效果很好,但使用 ajax 时会出现我提到的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 2011-03-11
相关资源
最近更新 更多