我一直在试图弄清楚为什么这个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>
非常感谢任何帮助。
答案 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。
(只是为所有反对此问题的人添加此内容) (这听起来像是重复的)