блок jQuery исключения UI

Я использую JQuery плагин UI blockUI для блокирования UI для каждого запроса ajax. Это работает как очарование, однако, я не хочу блокировать UI (Или по крайней мере не показать, "Ожидайте" сообщение), когда я выполняю вызовы ajax для выборки автоматического заполнения, предлагают объекты. Как я делаю это? Я использую плагин автоматического заполнения jQuery для функциональности автоматического заполнения.

Существует ли способ, которым я могу сказать блоку плагин UI для не блокирования UI для автоматического заполнения?

9
задан Chirantan 14 April 2010 в 04:47
поделиться

5 ответов

$('#myWidget').autocomplete({
    source: function(data, callback) {
        $.ajax({
            global: false,  // <-- this is the key!
            url: 'http:...',
            dataType: 'json',
            data: data,
            success: callback
        });
    }
});
21
ответ дан 4 December 2019 в 08:32
поделиться

попробуйте использовать декоратор

$.blockUI = function() {
    if (condition_you_dont_want_to_block) {
        return;
    }
    return $.blockUI.apply(this, arguments);
}

или вы можете написать свою собственную блочную функцию, которая будет умнее

function my_blockUI() {
    if (condition_you_dont_want_to_block) {
        return;
    }
    $.blockUI();
}
$(document).ajaxStart(my_blockUI).ajaxStop($.unblockUI);
1
ответ дан 4 December 2019 в 08:32
поделиться

использование модального блока (блочного пользовательского интерфейса) означает блокировку любых входных данных от пользователя, я бы посоветовал простому старому пульсатору показать «Подождите ...» и block (установить атрибуты readonly = "readonly") ur вводит элементы управления до тех пор, пока запрос ajax не будет завершен.

Вышеупомянутый интерфейс кажется противоречивым!

0
ответ дан 4 December 2019 в 08:32
поделиться

Вы можете настроить blockUI на работу для всех функций на странице, добавив в глобальный обработчик событий jQuery. Чтобы убедиться, что он не вызывается при вызовах автозаполнения ajax, мы должны определить, является ли вызов вызовом автозаполнения или нет. Проблема в том, что этим глобальным функциям доступно не так много информации. Однако ajaxSend действительно получает некоторую информацию. Он получает объект настроек, используемый для вызова ajax. объект настроек имеет отправляемую строку данных. Поэтому вы можете добавить к каждой строке данных в каждом запросе ajax на вашей странице что-то вроде:

&notautocomplete=notautocomplete

Например:

$.ajax({data:"bar=1&foo=2&notautocomplete=notautocomplete"})

Затем мы можем поместить этот код в раздел готовности вашего документа перед любым другим:

$(document).ajaxSend(
    function (event, xhr, ajaxOptions){
     if(ajaxOptions.data.indexOf("notautocomplete") !== -1){
         $.blockUI;
     }
});
$(document).ajaxStop($.unblockUI);

Конечно другая лучшая идея - искать что-то уникальное в запросах автозаполнения, например URL-адрес, но это зависит от того, какой плагин автозаполнения вы используете и как вы его используете.

1
ответ дан 4 December 2019 в 08:32
поделиться

Хм, похоже, это недостающая функция в jquery :) Вы можете использовать глобальный флаг, чтобы указать, является ли это вызовом автозаполнения, и обернуть его в общую функцию автозаполнения

    var isAutoComplete  = false;
    function autoComplete(autocomplete){
    isAutoComplete = true;
    if($(autocomplete).isfunction())
       autocomplete();
    }

        $(document).ajaxStart(function(){if(!isAutoComplete)$.blockUI();}).ajaxStop(function(){isAutoComplete = false;$.unblockUI();});

Это не очень хорошее решение, но оно должно работать...

2
ответ дан 4 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: