2010-10-21 99 views
0

我一直在試圖找出爲什麼這個jQuery腳本每次實際點擊'.day-available'元素都會調用三次click綁定事件。這是更新日曆旁邊的<div>的日曆。Drupal jQuery單擊事件被稱爲每次點擊三次

一切工作正常,但我看到在Firebug,每個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

結合的Click事件之前嘗試這個

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

+0

+1這個完全爲我工作,但我想理解爲什麼。這是一個Drupal相關的問題或jQuery? – FLY 2012-11-09 09:01:38

2

return false;添加到點擊處理程序的末尾。

0

查看此處瞭解更多信息。 jQuery ready function is called twice

而解除綁定並沒有幫助,也返回假不是我見過的大多數情況下的修復。試着看看會發生什麼,如果你註釋掉你的ready函數,或者不把它綁定到div。

(只需添加這爲反彈到這個問題,所有的人) (這聽起來像一個重複)

1

這是非常方便

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

我想你錯過了你答案的一部分。另外,試着解釋你的代碼的作用/它是如何做到的。沒有任何支持信息的代碼塊不可能幫助任何人。 – 2015-03-17 15:02:13