javascript - 如何延迟 select-2,以便在用户输入数据后等待一段时间

标签 javascript jquery jquery-select2

我知道上述可以通过在 AJAX 调用中使用 quietMillis 来实现,但我使用查询来缓存数据。在这里我无法延迟 AJAX 调用。下面是代码

$('#AssetType').select2({
    cacheDataSource: [],
    placeholder: ' ',
    quietMillis: 3000,
    query: function q(query) {
        self = this;
        var key = query.term;
        var cacheData = self.cacheDataSource[key];
        if (cacheData) {
            query.callback({
                results: $.map(cacheData, function (item) {
                    return {
                        text: item.LongDescription,
                        id: item.AssetTypeID
                    }
                })
            });
            return;
        }
        else {
            $.ajax({
                url: 'http://localhost:52377/api/reference/asset/types/' + key,
                dataType: 'json',
                type: 'GET',
                quietMillis: 3000,
                //data: function (query) {
                //    return { assetType: query.term, };
                //},
                success: function (data) {
                    self.cacheDataSource[key] = data;
                    query.callback({
                        results: $.map(data, function (item) {
                            return {
                                text: item.LongDescription,
                                id: item.AssetTypeID
                            }
                        })
                    });
                },
                cache: true
            })
        }
    }

});

是否有任何解决方法来延迟 AJAX 调用,以便每次击键都不会触发 AJAX 调用?使用“查询”的原因是为了缓存,仅通过在 AJAX 调用中将缓存设置为 true 是无法实现的。

最佳答案

根据select2 documentation ,您可以轻松做到这一点。

A request is being triggered on every key stroke, can I delay this?

By default, Select2 will trigger a new AJAX request whenever the user changes their search term. You can set a time limit for debouncing requests using the ajax.delay option.

This will tell Select2 to wait 250 milliseconds before sending the request out to your API.

$('select').select2({
  ajax: {
    url: '/example/api',
    delay: 250
  }
});

关于javascript - 如何延迟 select-2,以便在用户输入数据后等待一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30805457/

相关文章:

javascript - 为什么 Jquery/ajax 调用 RESTful 服务无法获得成功回调?

javascript - 即使 Ajax 调用未在 Select2 中返回任何结果,也将值保留在输入中

javascript - 更改指令中函数参数的对象值

javascript - 如何在单击 Angular ui 选项卡中的每个选项卡时调用来自不同 Controller 的不同功能?

javascript - 动态添加两个表单字段到表单

javascript - 突出显示/取消突出显示列中的一行

jquery-select2 - Select2 - 如何将关闭图标移动到所选项目的右侧

javascript - 搜索隐藏的 select2 文本

javascript - 检测字符串中的主题标签和@

javascript - 如何响应 Telegram Bot Webhook 请求?相同的请求重复出现