语义-UI 搜索模块 OnSelect 问题

Semantic-UI Search Module OnSelect issue

我使用语义-UI 搜索模块创建了一个自动完成输入字段(搜索地址)。自动完成本身工作正常,但我在尝试使用 OnSelect 方法自定义操作时遇到了一个奇怪的行为。

$('#address_search')
              .search({
                apiSettings: {
                  url: 'ajax_search_address/{query}'
                },
                minCharacters: 4,
                maxResults: 5,
                showNoResults: true,
                type: 'category',
                searchDelay: 0,
                duration: 200,
                fields: {
                    categories: 'results',
                    categoryName: 'state',
                    categoryResults: 'results',
                    description:'city',
                },
                onSearchQuery: function(query){
                    $('#address_search').addClass("loading");
                },
                onResults: function (response){
                    $('#address_search').removeClass("loading");
                },
                onSelect: function(result, response) {
                    address = result.title + ', ' + result.city + ' ' + result.region;
                    $('#address_search').search('set value', address);
                    //$('#address_search').find('input').val(address);
                    $('#address_search').search('hide results');
                    $('#address_search').removeClass("loading");

                    return false;
                },
              });

我使用自定义 OnSelect 方法的原因是为了以特定方式显示地址结果(不同于它的返回方式)。 我面临的问题是,当我 select 返回列表中的地址时,它似乎正确地调用了 'set value' 但随后似乎生成了一个具有新值的新 ajax 调用,因此再次(单独)显示一个带有该地址的新下拉菜单。 如上面的调用所示,我尝试使用 jQuery(而不是调用 'set value')手动将值分配给输入字段,但行为同样相同。

我尝试使用 'cancel query' 方法来尝试在 select 值时取消最后一次 ajax 调用,但它似乎没有任何效果(并且我宁愿避免不必要的电话)。

有谁知道如何防止这种情况发生?默认的 onSelect 方法(设置为 'return true' 时不会显示此行为,因此我假设有一种方法可以防止这种情况发生,但我无法根据文档或有关该主题的其他线程找到它。

谢谢!!

The default onSelect method (when set to 'return true' does not show this behaviour

只需将 return false 设置为 return true 即可防止其再次调用。

我在选择结果后将特定值写入搜索字段时遇到问题。

我正在使用 setTimeout() 方法来避免语义的默认行为覆盖我的值,但它会将值更改为标题字段,然后快速恢复到我想要的,所以我来这里寻找更好的方法。

Joshua 的回答让我走上了正确的道路,这就是最终对我有用的东西。 return false 努力防止发生任何其他事情,添加 'hide results' 是我想要的唯一额外行为:

onSelect: function (result, response) {
    doSomethingWithResult(result)
    $(".ui.search").search('hide results')
    return false
}

这里是多个输入字段的示例,同时使用 setTimeout 用不同的字段填充它们:

    $(".ui.input.search").search({
    type: "standard",
    minCharacters: 2,
    onSelect: function onSelect(result, response) {
        console.log(result);
        setTimeout(()=>{
            $(this).search('set value', result.address);
        },10);
    },

如你所见,使用$(this)和箭头函数()=>{可以让它填充对应的被点击的输入框,由于true是return自动全部需要的是 setTimeout