Javascript 如果已经触发另一个,则仅触发一次功能

Javascript 如果已经触发另一个,则仅触发一次功能,javascript,jquery,Javascript,Jquery,我创建了两个函数。为了保持简单,让我们以以下为例: 我得到了为同一个对象触发不同事件的函数。您可以使用键盘箭头 $("body").keydown(function(e) { if (event.which == 39) open_second_layer(); }); $("body").keydown(function(e) { if (event.which == 37) open_first_layer(); }); 一旦我启动一个函数并再次按下同一个键,它就会再次启动

我创建了两个函数。为了保持简单,让我们以以下为例:

我得到了为同一个对象触发不同事件的函数。您可以使用
键盘箭头

$("body").keydown(function(e) {
    if (event.which == 39) open_second_layer();
});
$("body").keydown(function(e) {
    if (event.which == 37) open_first_layer();
});
一旦我启动一个函数并再次按下同一个键,它就会再次启动动画(不必要)

因此,一旦启动了函数
open\u second\u layer
,在再次启动
open\u second\u layer
之前,应该无法再次启动该函数。反之亦然


我找到了
.bind
.when
这两种可能的解决方案,但我不知道如何正确使用它们。我很感激谷歌给我的每一个建议或关键词

首先将另一个函数放入幻灯片中,如:

function slide_first(){
  // other code
  $('#activate_second').one('click', slide_second);
}
$('#activate_first').one('click', slide_first);
或者使用匿名函数执行相同操作:

$('#activate_first').one('click', function(){
  // slide_first code here
  $('#activate_second').one('click', function(){
    // slide_second code here
  });
});
也许你真的想要:

function recursiveSlider(){
  $('#activate_first').one('click', function(){
    // slide_first code here
    $('#activate_second').one('click', function(){
      // slide_second code here
      recursiveSlider();
    });
  });
}
recursiveSlider();

首先将另一个函数放入幻灯片中,如:

function slide_first(){
  // other code
  $('#activate_second').one('click', slide_second);
}
$('#activate_first').one('click', slide_first);
或者使用匿名函数执行相同操作:

$('#activate_first').one('click', function(){
  // slide_first code here
  $('#activate_second').one('click', function(){
    // slide_second code here
  });
});
也许你真的想要:

function recursiveSlider(){
  $('#activate_first').one('click', function(){
    // slide_first code here
    $('#activate_second').one('click', function(){
      // slide_second code here
      recursiveSlider();
    });
  });
}
recursiveSlider();

首先将另一个函数放入幻灯片中,如:

function slide_first(){
  // other code
  $('#activate_second').one('click', slide_second);
}
$('#activate_first').one('click', slide_first);
或者使用匿名函数执行相同操作:

$('#activate_first').one('click', function(){
  // slide_first code here
  $('#activate_second').one('click', function(){
    // slide_second code here
  });
});
也许你真的想要:

function recursiveSlider(){
  $('#activate_first').one('click', function(){
    // slide_first code here
    $('#activate_second').one('click', function(){
      // slide_second code here
      recursiveSlider();
    });
  });
}
recursiveSlider();

首先将另一个函数放入幻灯片中,如:

function slide_first(){
  // other code
  $('#activate_second').one('click', slide_second);
}
$('#activate_first').one('click', slide_first);
或者使用匿名函数执行相同操作:

$('#activate_first').one('click', function(){
  // slide_first code here
  $('#activate_second').one('click', function(){
    // slide_second code here
  });
});
也许你真的想要:

function recursiveSlider(){
  $('#activate_first').one('click', function(){
    // slide_first code here
    $('#activate_second').one('click', function(){
      // slide_second code here
      recursiveSlider();
    });
  });
}
recursiveSlider();
您可以使用jQuery的

在第一个单击处理程序中,绑定第二个

在第二个单击处理程序中,绑定第一个

首先
第二
$(文档).ready(函数(){
函数slide_first(){
$(“#首先激活”).show();
$(“#激活第二个”).hide();
$(“#激活第二个”)。一个('单击',幻灯片#第一个);
};
函数slide_second(){
$(“#首先激活”).hide();
$(“#激活第二个”).show();
$('首先激活')。一个('单击',第二个幻灯片);
};
$('首先激活')。一个('单击',第二个幻灯片);
$(“#激活第二个”)。一个('单击',幻灯片#第一个);
});
您可以使用jQuery的

在第一个单击处理程序中,绑定第二个

在第二个单击处理程序中,绑定第一个

首先
第二
$(文档).ready(函数(){
函数slide_first(){
$(“#首先激活”).show();
$(“#激活第二个”).hide();
$(“#激活第二个”)。一个('单击',幻灯片#第一个);
};
函数slide_second(){
$(“#首先激活”).hide();
$(“#激活第二个”).show();
$('首先激活')。一个('单击',第二个幻灯片);
};
$('首先激活')。一个('单击',第二个幻灯片);
$(“#激活第二个”)。一个('单击',幻灯片#第一个);
});
您可以使用jQuery的

在第一个单击处理程序中,绑定第二个

在第二个单击处理程序中,绑定第一个

首先
第二
$(文档).ready(函数(){
函数slide_first(){
$(“#首先激活”).show();
$(“#激活第二个”).hide();
$(“#激活第二个”)。一个('单击',幻灯片#第一个);
};
函数slide_second(){
$(“#首先激活”).hide();
$(“#激活第二个”).show();
$('首先激活')。一个('单击',第二个幻灯片);
};
$('首先激活')。一个('单击',第二个幻灯片);
$(“#激活第二个”)。一个('单击',幻灯片#第一个);
});
您可以使用jQuery的

在第一个单击处理程序中,绑定第二个

在第二个单击处理程序中,绑定第一个

首先
第二
$(文档).ready(函数(){
函数slide_first(){
$(“#首先激活”).show();
$(“#激活第二个”).hide();
$(“#激活第二个”)。一个('单击',幻灯片#第一个);
};
函数slide_second(){
$(“#首先激活”).hide();
$(“#激活第二个”).show();
$('首先激活')。一个('单击',第二个幻灯片);
};
$('首先激活')。一个('单击',第二个幻灯片);
$(“#激活第二个”)。一个('单击',幻灯片#第一个);
});

这是一个完美的授权用例。您有一个单击事件,每当该事件发生时,您都可以确定单击了什么,并相应地采取行动:

$(document.body).on("click", function(ev) {
    var $targ = $(ev.target);

    if ($targ.is('#button_1')) {
        // someone clicked #button_1
    }

    if ($targ.is('.page-2 *')) {
        // something inside of .page-2 was clicked!!
    }
});
更新:现在OP包含了更多的代码,我不确定问题是-没有必要绑定和取消绑定事件

。。。或者,如果您试图构建滑块,我建议更改您的命名约定:

var current\u layer=1,
$all_layers=$('[id^=“panel_”]'),
total_layers=$all_layers.length;
功能移动层(dir){
当前_层+=dir;
如果(当前层<1)当前层=总层;
否则,如果(当前层>总层)当前层=1;
$all_layers.removeClass('active');
$('#panel_u'+当前层).addClass('active');
}
//一个事件===良好
$(“正文”).keydown(函数(e){
if(event.which==39)移动_层(1);
如果(event.which==37)移动_层(-1);
});
移动_层(0);

这是一个完美的授权用例。您有一个单击事件,每当该事件发生时,您都可以确定单击了什么,并相应地采取行动:

$(document.body).on("click", function(ev) {
    var $targ = $(ev.target);

    if ($targ.is('#button_1')) {
        // someone clicked #button_1
    }

    if ($targ.is('.page-2 *')) {
        // something inside of .page-2 was clicked!!
    }
});
更新:现在OP包含了更多的代码,我不确定问题是-没有必要绑定和取消绑定事件

。。。或者,如果您试图构建滑块,我建议更改您的命名约定:

var current\u layer=1,
$all_layers=$('[id^=“panel_”]'),
total_layers=$all_layers.length;
功能移动层(dir){
当前_层+=dir;
如果(当前层<1)当前层=总层;
否则,如果(当前层>总层)当前层=1;
$all_layers.removeClass('active');
$('#panel_u'+当前层).addClass('active');
}
//一个事件===良好
$(“正文”).keydown(函数(e){
if(event.which==39)移动_层(1);
如果(event.which==37)移动_层(-1);
});
压敏电阻