2016-04-18 2 views
0

У меня есть функция изменения на элементе select, который запускает запрос и ответ ajax. В какой-то момент он начал работать дважды, но не сам запуск изменения. Просто все внутри функции изменения. Повторить: функция изменения запускается только один раз, но содержимое функции выполняется дважды. Это не происходило две недели назад (последний раз я проверил его), и с тех пор я не изменил какой-либо связанный код. Просто обновился до WordPress 4.5. Вот код (с информацией о журнале консоли в комментариях):Функция scrolltop работает дважды

$('body').on('change', 'select#users_view', function() 
{ 
    var view = $(this).val(); 
    console.log('triggered '+view); // this only prints ONCE 
    $('html, body').animate({scrollTop:0}, 250, function() 
    { 
     console.log('scroll top '+view); // this prints TWICE 
     $.post(application_ajax.ajaxurl,{action:'application_ajax',dataType:'html',class:'views_users_management',method:'switch_view',view:view},function(response) 
     { 
      if('status' in response) 
      { 
       if(response.status == 'success') 
       { 
        console.log('success '+view); // this prints TWICE 
        $.ReplaceUsersContainer(response.html, false); 
       } 
       else if(response.status == 'error') $.showError(response.message); 
       else $.showError(); 
      } 
      else $.showError(); 
     });    
    }); 
}); 

Что такое земля? Файл javascript загружается только один раз. Ни один другой файл javascript не ссылается на этот элемент выбора нигде. Функция изменения запускается только один раз, как показывает журнал консоли. Но по какой-то причине функция анимации работает дважды.

EDIT Это только мне пришло в голову, что, может быть, он работает в два раза, так как селектор для функции живого является html, body, но это никогда не было с JQuery раньше, и если это то, что JQuery делает сейчас, я У меня есть тысячи файлов javascript для изменения.

+0

Посмотреть мой выбор. jQuery никогда не вел себя так раньше, с помощью html, body on animate functions. Новые правила jQuery. Это бесит. –

ответ

0

Ничего себе, спасибо jQuery. Использование html, тело в качестве селектора функций scrollTop является стандартной практикой для многих из нас в течение длительного времени, и теперь оно ведет себя по-другому, и у всех нас есть много работы. EVEN WORDPRESS CORE FILES использует html,body для функций анимации.

Вкратце: селектор html, тело теперь вызывает функции анимации, которые будут выполняться дважды в jQuery v1.12.3, тогда как в предыдущих версиях это было не так.

EDIT БЛАГОДАРЯ ПЕРВЫМ ИЗ КОММЕНТАРИЕВ НИЖЕ Developer107

Поскольку Firefox нуждается html и Chrome и т.д. нужно body, способ исправить это с помощью функции дребезга.

Я использую этот крошечный плагин: https://github.com/cowboy/jquery-throttle-debounce/

Тогда называют свою функцию, как это:

$('html,body').animate({scrollTop:0}, 250, $.debounce(0, true, function() 
{ 
    // do stuff 
})); 
+0

Если вы хотите, чтобы это правильно запускалось в firefox, вам может понадобиться 'html'. Пожалуйста, обратитесь к этой ссылке - http://stackoverflow.com/q/12222485/4719761 Как упоминалось в одном из комментариев в этом сообщении, вы можете «debounce» в функции обратного вызова. – Bhumika107

+0

спас мою задницу. обновил мой ответ. Благодарю. –

Смежные вопросы