每次点击三次调用Drupal jQuery点击事件

时间:2010-10-21 06:00:37

标签: jquery ajax drupal

我一直在试图弄清楚为什么这个jQuery脚本会对'.day-available'元素的每次实际点击调用click绑定事件三次。这是一个更新日历旁边<div>的日历。

一切正常,但我在Firebug中看到每个ajax url调用正在执行三次。我找到了有关使用$(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 个答案:

答案 0 :(得分:4)

试试这个

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

绑定点击事件之前。

答案 1 :(得分:2)

return false;添加到点击处理程序的末尾。

答案 2 :(得分:1)

这很方便

jQuery(this,context).bind('click',function(){
  for (var property in context){
    if(property=='outerHTML'){

答案 3 :(得分:0)

有关详情,请参阅此处。 jQuery ready function is called twice

取消绑定并没有帮助,在我见过的大多数情况下,返回false也不是解决方法。试着看看如果你注释掉你的ready函数会发生什么,或者不将它绑定到div。

(只是为所有反对此问题的人添加此内容) (这听起来像是重复的)