防止在jquery-ui自动完成期间执行$ .ajaxStart()

jar*_*red 6 jquery jquery-ui

我在我正在创建的页面上使用jquery-ui自动完成.在同一页面上,我发生了一些ajax事件.在其他ajax活动期间,我正在向我的页面添加叠加层,以便网站上的所有链接都不再可供用户点击.我不希望在自动完成期间发生这种情况.

自动完成:

$(function() {
    $( "#search_input" ).autocomplete({
    source: '/search_autocomplete/',});
});
Run Code Online (Sandbox Code Playgroud)

AJAX:

$.ajax({
    url: "/ajax_login/",
            login_user: $("#login_user").val(),
            password: $("#login_password").val(),
            });
Run Code Online (Sandbox Code Playgroud)

ajaxStart:

$("#loading_gif").ajaxStart(function() {
    $("#overlay").show();
    $(this).show();
});
Run Code Online (Sandbox Code Playgroud)

防止在没有必要的ajax事件期间执行ajaxstart函数.我加

global:false,
Run Code Online (Sandbox Code Playgroud)

到相应的ajaxfunctions.如何在不更改jquery-ui源的情况下在自动完成期间执行类似的操作?

nav*_*een 5

为此,您必须省略简写调用source并更改此类调用.

$('#search_input').autocomplete({
    source: function (request, response) {
        var DTO = { "term": request.term };
        //var DTO = { "term": $('#search_input').val() };
        $.ajax({
            data: DTO,
            global: false,
            type: 'GET',
            url: '/search_autocomplete/',
            success: function (jobNumbers) {
                //var formattedNumbers = $.map(jobNumbersObject, function (item) {
                //    return {
                //        label: item.JobName,
                //        value: item.JobID
                //    }
                //});
                return response(jobNumbers);
            }
        });
    }
    //source: '/search_autocomplete/'
});
Run Code Online (Sandbox Code Playgroud)

这种长手法的优点是

  1. 您可以传递多个参数.参数名称也不必是term.
  2. 简写符号需要一个字符串数组.在这里你也可以返回一个对象数组.


Mic*_*ade 1

如果您想在大多数时间但现在一直以某种$.ajax()方式工作,那么您可能不应该更改其默认行为。

我建议创建一个将 ajax 请求包装在一个函数中的函数,该函数在适当的时间启用和禁用覆盖。在您想要使用叠加层的地方调用此函数,并使用 plain$.ajax()进行自动完成。