javascript点击两次以上

时间:2013-11-26 20:15:16

标签: javascript jquery

我怀疑这里发生了一些奇怪的事情;

$('#botonAñadir').fadeOut(500, function (e) {
    $('#botonEditar').fadeIn(500).on('click', function (e) {
         console.log(DEBUG + 'en el click del boton');
         e.preventDefault();
         e.stopPropagation();   
         localStorage.removeItem(contacto);
         that.nuevoContacto();
         $(this).fadeOut(500, function () {
             $('#botonAñadir').fadeIn();
         });
    });
});   

当我点击#botonAñadir时第一次按预期工作但第二次点击它会调用两次that.nuevoContacto(),依此类推,所以第三次调用它3次等等。

我是否遵循任何反模式或类似的?我无法理解为什么它的表现如此。

将淡化与on相结合是否存在问题?

EDIT。

我就像下面这样,即使我知道这个时候看起来很丑,我的大脑也被炸了;

$('#botonAñadir').fadeOut(500, function (e) {
    $('#botonEditar').fadeIn(500);
 });  

 $('#botonEditar').on('click', function (e) {
     console.log(DEBUG + 'en el click del boton');
     e.preventDefault();
     e.stopPropagation();   
     localStorage.removeItem(contacto);
     that.nuevoContacto();
     $(this).fadeOut(500, function () {
           $('#botonAñadir').fadeIn();
           $('#botonEditar').off('click');
     });
});   

2 个答案:

答案 0 :(得分:1)

问题是每次元素淡入时都会绑定onClick事件处理程序。

尝试在淡入淡出效果之外绑定事件处理程序,或在再次绑定处理程序之前使用.off('click'):

$('#botonEditar').fadeIn(500).off('click').on('click', function (e) {...

答案 1 :(得分:1)

他们这样写了,on('click'...部分每次执行淡出功能时都会添加另一个点击处理程序...

尝试使用.once()或重写以将on()放在开头...

 $('#botonEditar').fadeIn(500).once('click', function (e) {