【问题标题】:jquery autocomplete filtering?jquery自动完成过滤?
【发布时间】:2023-03-13 02:20:01
【问题描述】:

我想根据选择输入中的选定选项过滤自动完成结果。

示例 json 数据:

[{"ContactId":"8590051631","ContactType":Company,"Name":"Test },{""ContactId":"8590049225","ContactType":Person,"Name":"TestName} ]

这是我的标记

<div>

<select class="type">
<option>Person</option>
<option>Company</option>
</select>

<input type="text" class="name" />

</div>


 $('.name').autocomplete("http://services.mydomain.com/rest/ia/findcontact", {
            dataType: 'jsonp',
            extraParams: {
                limit: '',
                timestamp: '' }
            },
            parse: function(data) {
                var items = data;
                var parsed = [];
                if (items != null || items != undefined) {
                    for (var i = 0; i < items.length; i++)
                        parsed[i] = { data: [items[i]], value: items[i].ContactId, result: [items[i].Name] };
                }
                return parsed;
            },
            formatMatch: function(d,i,t) {
            alert($(this).parent().find(".type").val());
               // do some filtering here?
            }

        });    

似乎我应该使用 formatMatch 选项来过滤结果,但我无法让它工作。如何根据选择的选项值过滤结果?

【问题讨论】:

标签: jquery-selectors jquery-autocomplete


【解决方案1】:

我猜在parse函数中,可以获取当前选中的类型,如果不是选中的类型则忽略该项?

parse: function(data) {
    var items = data;
    var parsed = [];
    if (items != null || items != undefined) {
        //get current type
        var selectedType = $(this).parent().find(".type").val();
        for (var i = 0; i < items.length; i++) {
            if (selectedType == items[i].ContactType){
                //just append to the array so you don't need to worry about missing indices.
                parsed.push({ data: [items[i]], value: items[i].ContactId, result: [items[i].Name] });
            }
        }
    }
    return parsed;
}

【讨论】:

  • 感谢您的回复和建议。我也在考虑这一点并尝试过,但我得到 'undefined' for var selectedType = $(this).parent().find(".type").val();看起来它找不到选择输入。如何在与自动完成输入相同的 div 中找到其他输入?
  • 我不是 100% 确定 $(this) 在解析函数中指向什么。也许尝试 alert($(this)) 以确保它指向文本框元素?如果可行,那么找到选择框是微不足道的。 $(this).prevAll("select.type").val();
  • 查看 Firebug $(this) 是自动完成插件。我试过 $(this).parent().find(".type").val();和 $(this).prevAll("select.type").val();但两者都不起作用。
  • 在这篇文章中找到了解决方案。 stackoverflow.com/questions/2064651/…
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2012-02-09
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 2015-06-21
相关资源
最近更新 更多