ajax-post срабатывает дважды по событию

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
Есть списки с множественным выделением (multiple). Установил визуальный виджет для удобного выделения:
Скрытое содержимое доступно для зарегистрированных пользователей!

Возникла проблема. Есть код:
Код:
$('.form_filters_objects select').change( count_objects );
Если выбираю в списках, которые сформированы виджетом, то ajax-запрос срабатывает дважды с задержкой в 10мс. Если делаю видимым списки и выбираю значения там, то запрос делается один раз.
Я так думаю, что в виджете происходит очистка поля, затем новое заполнение. Хотя, в обоих ajax-запросах данные передаются одни и те же (что выбрано в списке).
Как найти причину?
firebag или еще чего-нибудь может помочь в плане профилирования или еще чего (весь функционал не знаю)?
 
Последнее редактирование:
это вы уже сами прикрутили?

если ДА, то можно попробовать объявить переменную отвечающую за статус запросов
например:
Код:
var in_progress = false;
далее перед началом ajax-запроса проверяете, работает ли уже запрос:
Код:
if (in_progress)
    return;
далее передаете переменной значение true
Код:
var in_progress = true;
а в callback функции запроса обратно
Код:
var in_progress = false;
 
это вы уже сами прикрутили?

если ДА, то можно попробовать объявить переменную отвечающую за статус запросов
например:
Думал над этим. Мне кажется, что это временный костыль. Запрос делается в другой функции. Кроме него выполняется и другой различный код. Если даже написать так:
Код:
var i = 1;
$('.form_filters_objects select').change( function(){
console.log( i );
i++;
} );
то событие change срабатывает два раза. Как-будто двойная подписка.

Попробовал реализовать на сайте, не получилось чего-то, вообще не работает: Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
Думал над этим. Мне кажется, что это временный костыль. Запрос делается в другой функции. Кроме него выполняется и другой различный код. Если даже написать так:
Код:
var i = 1;
$('.form_filters_objects select').change( function(){
console.log( i );
i++;
} );
то событие change срабатывает два раза. Как-будто двойная подписка.

Попробовал реализовать на сайте, не получилось чего-то, вообще не работает: Для просмотра ссылки Войди или Зарегистрируйся
я подправил ваш код, так работает:
Код:
$(document).ready(function() {
    var i = 1; $('#selet_f').multipleSelect();

    $('#selet_f').on('chancge', function() {
        console.log($('#selet_f'));
        console.log(i);
        alert(i);
    });
});
в jQuery идентификаторы объявляются символом #, в отличие от mootools и прочих.
и будьте внимательнее с открытием\закрытием кавычек, скобок и других спец. символов
 
я подправил ваш код, так работает:
Код:
$(document).ready(function() {
    var i = 1; $('#selet_f').multipleSelect();

    $('#selet_f').on('chancge', function() {
        console.log($('#selet_f'));
        console.log(i);
        alert(i);
    });
});
в jQuery идентификаторы объявляются символом #, в отличие от mootools и прочих.
и будьте внимательнее с открытием\закрытием кавычек, скобок и других спец. символов
ну это понял, в редакторе там то одно само добавится, то другое + спешка.
И у вас тоже "on('chancge',"
Теперь Можно увидеть, что срабатывает два раза при изменении списка: Для просмотра ссылки Войди или Зарегистрируйся
а во втором списке один раз.
Может быть кто в js коде найдет причину? Я не понимаю в метадах js или чего там написано
 
используйте jQuery.chosen , там правда нет галок, как в этом рукожопом скрипте, зато стабильно работает
 
ну это понял, в редакторе там то одно само добавится, то другое + спешка.
И у вас тоже "on('chancge',"
Теперь Можно увидеть, что срабатывает два раза при изменении списка: Для просмотра ссылки Войди или Зарегистрируйся
а во втором списке один раз.
Может быть кто в js коде найдет причину? Я не понимаю в метадах js или чего там написано
В коде плагина есть триггер на change.
Возвращаясь к вашему коду, - так сработает один раз:
Код:
$(document).ready(function() {
    var i = 1;
    var j = 1;
$('#selet_f').multipleSelect({onClick: function(view) {
     alert(view.label + ' | ' + i++);
    }
    });
  
    $('#selet_2').on('change', function() {
        alert(i);
        j++;
    });
});
В документации есть список калбэков и эвентов с примерами:
Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
Назад
Сверху