jquery绑定函数在Firefox和Chrome之间有不同的执行顺序

jquery绑定函数在Firefox和Chrome之间有不同的执行顺序,jquery,firefox,google-chrome,bind,Jquery,Firefox,Google Chrome,Bind,就像这个例子: js代码: $('#checkbox_id').bind('change',function({ alert('change'); }).bind('click',function(event){ alert('click');event.preventDefault(); }); 在chrome中,单击复选框将显示以下内容: 警告“更改”和警告“单击”,复选框将不被选中。(首先取消选中复选框。) 在firefox中,单击复选框将显示: 警告“单击”,复选框将

就像这个例子:

js代码:

$('#checkbox_id').bind('change',function({
    alert('change');
}).bind('click',function(event){
    alert('click');event.preventDefault();
});
在chrome中,单击复选框将显示以下内容:

警告“更改”和警告“单击”,复选框将不被选中。(首先取消选中复选框。)

在firefox中,单击复选框将显示: 警告“单击”,复选框将不被选中。(先取消选中复选框。)

firefox中不会触发此更改。 我不知道为什么,有人能告诉我吗


谢谢。

我认为chrome的行为与其他浏览器不同。我尝试了以下代码:

$('#checkbox_id').bind('change',function(){
    alert('change');
}).bind('click',function(event){
    alert('click');
});
(这里拉小提琴:) Firefox在更改处理程序之前执行单击处理程序,IE和chrome在单击处理程序之前执行更改处理程序。
我认为你对此无能为力,我认为这是因为复选框在警报后失去焦点。因此不会触发“更改”事件,但在chrome中会触发更改事件。这个问题和我的问题有点类似。谢谢@Nicola@Sergey如果将警报替换为console.log,则会发现同样的问题。在单击函数中,此代码“event.preventDefault()”停止在firefox中执行更改事件,因为点击处理程序是在变更处理程序之前执行的。为什么在firefox中点击处理程序会在变更处理程序之前执行?@bodl我认为firefox处理事件的方式与其他浏览器不同。我不知道是否有这方面的规范,所以每个供应商都有自己的实现。对我来说,单击处理程序在更改处理程序之前执行更有意义,但这是我的观点