【发布时间】:2012-02-12 23:34:52
【问题描述】:
我的页面上有大约 30 个可点击的 div,所以我想我会使用它们的类名来触发点击事件。
$('div.select_statement_option_on').live('click', function() {
$(this).attr('class', 'select_statement_option_off');
});
$('div.select_statement_option_off').live('click', function() {
$(this).attr('class', 'select_statement_option_on');
});
现在我遇到了一个障碍,在 35 个 div 中的一个被点击,一些额外的工作完成了,所以我添加了这个
$('div#sel_total_cost').click(function() {
if ($(this).attr('class', 'select_statement_option_off')) {
$('div#sel_reg_type').attr('class', 'select_statement_option_on');
$('div#sel_days_reg').attr('class', 'select_statement_option_on');
$('div#sel_add_tickets').attr('class', 'select_statement_option_on');
$('div#sel_reg_date').attr('class', 'select_statement_option_on');
$('div#sel_pcode_disc').attr('class', 'select_statement_option_on');
}
});
所以在#sel_total_cost div 中,如果我从它的初始状态 (select_statement_option_off) 单击它,则会触发 ID 单击函数,然后是类单击函数。当我尝试单击它以将其关闭时,问题就来了。 ID 函数被触发,然后由于某种原因 div 的类被更改为“off”(没有“on”类函数触发),然后“off”类函数被触发并且 div 重新打开。这就是我一步步看到的,但要观看它,基本上意味着一旦打开就无法关闭它。我怎样才能整理出这个事件的顺序?
来自lonesomeday的回答
原来 if 语句是在分配类,而不是检查我的 div 是否有该类。更新 if 语句如下
$('div#sel_total_cost').click(function() {
if ($(this).hasClass('select_statement_option_off')) {
$('div#sel_reg_type').attr('class', 'select_statement_option_on');
$('div#sel_days_reg').attr('class', 'select_statement_option_on');
$('div#sel_add_tickets').attr('class', 'select_statement_option_on');
$('div#sel_reg_date').attr('class', 'select_statement_option_on');
$('div#sel_pcode_disc').attr('class', 'select_statement_option_on');
}
});
还要注意的是不再使用“live”绑定元素。与 jQuery 1.7 中较新的 '.on()' 函数相比,它已被弃用且性能不佳,因此我将处理程序更改为如下所示
$('div#select_statement_box').on('click',
'div.select_statement_option_off', function() {
$(this).attr('class', 'select_statement_option_on');
});
select 语句框是包含我的 div 的容器。
【问题讨论】:
-
小心使用
.live(),效率相当低。
标签: jquery