【问题标题】:how to delay select-2, so that it waits for some time after user types in data如何延迟select-2,以便在用户输入数据后等待一段时间
【发布时间】:2015-06-12 14:25:09
【问题描述】:

我知道上面可以通过在 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来实现的。

【问题讨论】:

    标签: javascript jquery jquery-select2


    【解决方案1】:

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

    每次按键都会触发一个请求,我可以延迟吗?

    默认情况下,当用户更改搜索词时,Select2 将触发新的 AJAX 请求。您可以使用 ajax.delay 选项设置去抖动请求的时间限制。

    这将告诉 Select2 在将请求发送到您的 API 之前等待 250 毫秒。

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

    【讨论】:

    【解决方案2】:

    我找到了一种延迟触发的方法。我在 underscore.js 中使用了 debounce 函数的实现。代码现在看起来像这样

    query: debounce(function q(query) {..
    .....
    }, 350),
    

    希望对某人有所帮助。

    【讨论】:

      【解决方案3】:

      Select2 (4.0.3) 有一个未记录的选项:minimumInputLength

      此选项将提示用户填写最少字符数,然后触发选择

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-29
        • 2020-09-07
        相关资源
        最近更新 更多