0

我用这个来自动完成:http: //jquery.bassistance.de/autocomplete/demo/

它适用于正常输入,例如:

$(".product_name").autocomplete('auto_complete.php', {
        selectFirst: false,
        extraParams: {
            type: 'products_name',
            lang: 'en',
        },
        width: '12%',
    });

当我的页面上有带类的输入时,这很好用product_name,但现在在我的新情况下,我想为页面上尚未出现的一些输入添加自动完成功能,它们只是使用类似这样的东西附加到正文中:

$('#blah').on('click', function(){
    $('.some_div').append('<input type="text" class="newly_added" />');
});

正常的自动完成初始化不适用于带有 class 的输入newly_added,所以我写道:

$('body').on('focus', '.some_div input[type="text"]', function(){   
        $(".newly_added").autocomplete('auto_complete.php', {
            selectFirst: false,
            extraParams: {
                type: 'products_name',
                lang: 'en',
            },
            width: '12%',
        });
    });

这解决了问题,现在newly_added也将自动完成,但问题是当我检查 Firebug 的 Ajax 请求时,将发送几个 ajax 请求而不是一个!我的意思是对于每个输入的自动完成,将向服务器发送超过 2、3、4 个请求,并且通过向页面添加更多输入来增加请求的数量,有时甚至会发送 20 个请求。

所以问题是,我应该如何防止多个请求呢?还是有其他适合这种情况的方法?

谢谢

4

1 回答 1

1

改用它并删除身体焦点处理程序:

$('#blah').on('click', function () {
    $('.some_div').append('<input type="text" class="newly_added" />').find('.newly_added').filter(function () {
        return !$(this).data('autocomplete')
    }).autocomplete('auto_complete.php', {
        selectFirst: false,
        extraParams: {
            type: 'products_name',
            lang: 'en',
        },
        width: '12%'//, for support of old IE, you should remove this extra comma
    });
});

可能不需要将特定数据添加到自动完成,因为我认为插件已经使用了一些,所以你可以尝试检查它。

更新

刚刚勾选,自动补全插件已经给元素添加了特定的数据,所以不需要添加数据,勾选就够了。

于 2013-06-27T12:17:12.473 回答