Событие Drupal jQuery click вызывается три раза за клик - PullRequest
0 голосов
/ 21 октября 2010

Я пытался выяснить, почему этот скрипт jQuery вызывает событие привязки кликов три раза для каждого фактического клика по элементу .day-available.Это календарь, который обновляет <div> рядом с календарем.

Все работает нормально, но я вижу в Firebug, что каждый вызов URL ajax выполняется три раза.Я нашел информацию об использовании чего-то вроде $ (this) .unbind, но мне нужно иметь возможность позволить пользователю вернуться к дате в календаре, на которую он щелкнул ранее.

Числозвонки не меняются между первым и последующими кликами.

Drupal.behaviors.uc_deliveries_now = function(context) {  
 $('.day-available').click(function(){
     $('.day-available').removeClass('selected-day');
     $(this).addClass('selected-day');

     var selected_day = $(this).html();
     var m_names = new Array("January", "February", "March","April", "May", "June", "July", "August", "September", "October", "November", "December");
     var d = new Date();
     var current_day = d.getDate();
     var current_month = d.getMonth();
     var current_year = d.getFullYear();

     if (selected_day < current_day) {
       // Move to next month
       current_month += 1;
     }

     $month_string = m_names[current_month];

     $.ajax({
       url: Drupal.settings.basePath + 'delivery_windows/' + $month_string.toLowerCase() + '/' + selected_day,
       success: function(data) {
         $('#time-selection').html(data);
       }
     });
   });
};

Это единственное, что есть в файле javascript, нет других привязок или чего-либо еще, что могло бы конфликтовать с этим.Весь файл JavaScript вставлен выше.Я просто не могу понять, почему это происходит.

Вот пример строки из календаря HTML:

<tr>
  <td>24</td>
  <td class="day-available">25</td>
  <td>26</td>
  <td class="day-available selected-day">27</td>
  <td>28</td>
  <td class="day-available">29</td>
  <td>30</td>
</tr>

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

4 голосов
/ 21 октября 2010

попробуйте

 $('.day-available').unbind()

до привязки события клика.

2 голосов
/ 21 октября 2010

добавить return false; в конец обработчика кликов.

1 голос
/ 17 марта 2015

Это удобно

jQuery(this,context).bind('click',function(){
  for (var property in context){
    if(property=='outerHTML'){
0 голосов
/ 20 февраля 2013

Смотрите здесь для получения дополнительной информации. jQuery ready функция вызывается дважды

И снятие привязки не помогает, также возвращение false не является исправлением в большинстве случаев, которые я видел Попробуйте посмотреть, что произойдет, если вы закомментируете свою готовую функцию или не привязываете ее к div.

(просто добавив это для всех людей, которые попадают в эту проблему) (и это звучит как дубликат)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...