假设我有以下代码行:

$comparePanel.on('click', '.pills li:not(.active)', toggleComparisonPanel);


指向函数:

function toggleComparisonPanel() {
  event.preventDefault();
  $(this).addClass('active').siblings().removeClass('active');
  $quickSpecsTable.toggleClass('comparison-mode');
  $filters.toggle();
}


这在Chrome中有效,因为据我所知,它显然将事件附加到窗口,使它成为全局窗口。但是,Firefox要求将事件传递给函数。我尝试了这个没有成功:

$comparePanel.on('click', '.pills li:not(.active)', toggleComparisonPanel(event);

function toggleComparisonPanel(event) {
  event.preventDefault();
  $(this).addClass('active').siblings().removeClass('active');
  $quickSpecsTable.toggleClass('comparison-mode');
  $filters.toggle();
}


甚至有可能发生这种情况,还是我唯一的选择将代码放入.on()函数中的匿名函数中,例如以下代码?

$comparePanel.on('click', '.pills li:not(.active)', function(event){
  event.preventDefault();
  $(this).addClass('active').siblings().removeClass('active');
  $quickSpecsTable.toggleClass('comparison-mode');
  $filters.toggle();
});


如果可能的话,我宁愿将事件处理程序和函数分开。除了说实话对我来说比较整洁外,可能没有太多原因,但是这样做很不错

最佳答案

您可以简单地在其他地方声明该函数,如下所示:

// declare event here, since you're using it here
function toggleComparisonPanel(event) {
    event.preventDefault();
    $(this).addClass('active').siblings().removeClass('active');
    $quickSpecsTable.toggleClass('comparison-mode');
    $filters.toggle();
}


//                                                  just pass the function here
$comparePanel.on('click', '.pills li:not(.active)', toggleComparisonPanel);

关于javascript - jQuery .on()语法和event.preventDefault(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8533066/

10-09 08:02