-
Javascript添加监听与删除监听用法详解
2021-01-19 17:32:58本文实例讲述了Javascript添加监听与删除监听的用法。分享给大家供大家参考。具体分析如下: js中事件监听就是利用addEventListener来绑定一个事件,这个用法在jquery中非常常用并且简单,但在原生js中比较复杂,... -
js取消键盘监听_Javascript添加监听与删除监听用法详解
2020-12-31 09:27:13本文实例讲述了Javascript添加监听与删除监听的用法。分享给大家供大家参考。具体分析如下:js中事件监听就是利用addEventListener来绑定一个事件,这个用法在jquery中非常常用并且简单,但在原生js中比较复杂,这里...本文实例讲述了Javascript添加监听与删除监听的用法。分享给大家供大家参考。具体分析如下:
js中事件监听就是利用addEventListener来绑定一个事件,这个用法在jquery中非常常用并且简单,但在原生js中比较复杂,这里整理了addEventListener事件各方法的测试与例子供大家参考学习。
在前两天做播放器的时候添加监听后删除监听遇到了一点麻烦,删不掉,后来看了一下才发现,参数需要完全对应,什么叫完全对应呢,换句话说:
$('.video')[0].addEventListener('timeupdate', currentTimeHandler, true);
比如这句,需要传入三个参数,这样才能够删除,为什么一定要这样,没错,蛋疼的地方就在这里:
在add和remove时,第三个参数确实可以不写,但此时他们的默认情况是不一样的!!
通常情况下addEventListener是false…
1、 添加自定义事件监听
var eventHandlesCounter=1;//统计添加事件监听的个数,0作为预留位
function addEvent(obj,evt,fn){
if(!fn.__EventID){ fn.__EventID=eventHandlesCounter++;}
if(!obj.__EventHandles){ obj.__EventHandles=[]; }
if(!obj.__EventHandles[evt]){
obj.__EventHandles[evt]=[];
if(obj["on"+evt] instanceof Function){
obj.__EventHandles[evt][0]=obj["on"+evt];
obj["on"+evt]=handleEvents;
}
}
obj.__EventHandles[evt][fn.__EventID]=fn;
function handleEvents(){
var fns = obj.__EventHandles[evt];
for (var i=0;i
fns[i].call(this);
}
}
2、自定义删除事件监听
function delEvent(obj,evt,fn){
if(!obj.__EventHandles || !obj.__EventHandles[evt] || !fn.__EventID){
return false;
}
if(obj.__EventHandles[evt][fn.__EventID]==fn){
delete obj.__EventHandles[evt][fn.__EventID];
}
}
3. 对上述方法进行修正
function addEvent(obj,evt,fn,useCapture){
if(obj.addEventListener){//优先使用W3C事件注册
obj.addEventListener(evt,fn,!!useCapture);
}else{
if(!fn.__EventID){fn.__EventID = addEvent.__EventHandlesCounter++;}
if(!obj.__EventHandles){ obj.__EventHandles=[];}
if(!obj.__EventHandles[evt]){
obj.__EventHandles[evt]=[];
if(obj["on"+evt]){
(obj.__EventHandles[evtype][0]=obj["on"+evtype]).__EventID=0;
}
obj["on"+evtype]=addEvent.execEventHandles;
}
}
}
addEvent.__EventHandlesCounter=1;
addEvent.execEventHandles = function(evt){
if(!this.__EventHandles) {return true;}
evt = evt || window.event;
var fns = this.__EventHandles[evt.type];
for (var i=0;i
if(fns[i] instanceof Function){
fns[i].call(this);
}
}
};
function delEvent(obj,evt,fn,useCapture){
if (obj.removeEventListener) {//先使用W3C的方法移除事件处理函数
obj.removeEventListener(evt,fn,!!useCapture);
}else {
if(obj.__EventHandles){
var fns = obj.__EventHandles[evt];
if(fns){delete fns[fn.__EventID];}
}
}
4、标准化事件对象
function fixEvent(evt){
if(!evt.target){
evt.target = evt.srcElement;
evt.preventDefault=fixEvent.preventDefault;
evt.stopPropagation = fixEvent.stopPropagation;
if(evt.type == "mouseover"){
evt.relatedTarget = evt.fromElement;
}else if(evt.type == "mouseout"){
evt.relatedTarget = evt.toElement;
}
evt.charCode =(evt.type == "keypress")?evt.keyCode:0;
evt.eventPhase = 2;
evt.timeStamp = (new Date()).getTime();
}
return evt;
}
fixEvent.preventDefault=function(){ this.returnValue=false;}
fixEvent.stopPropagation=function(){this.cancelBubble = true;};
fixEvent函数不是单独执行的,它必须有一个事件对象参数,而且只有事件发生时它才被执行!最好的方法是把它整合到addEvent函数的execEventHandles里面。
addEvent.execEventHandles = function (evt) {//遍历所有的事件处理函数并执行
if (!this.__EventHandles) {return true;}
evt = fixEvent(evt || window.event);//在这里对其进行标准化操作
var fns = this.__EventHandles[evt.type];
for (var i=0;i< fns.length;i++) {
if (fns[i] instanceof Function) {
fns[i].call(this,evt);//并且将其作为事件处理函数的第一个参数
//这样在事件处理函数内部就可以使用统一的方法访问事件对象了 } } };
上面是高手写了,下面整理几个实际的监听事情的例子
test6.htmlfunction test(){
window.alert("您投了一次票");
document.getElementById("1").detachEvent("onclick",test);
}
document.getElementById("1").attachEvent("onclick",test);
这里使用document.getElementById("1").attachEvent("onclick",test);进行动态的事件绑定,使用
document.getElementById("1").detachEvent("onclick",test)进行动态的时间的取消,这样就实现了这个事件只能相应一次,下次再点击这个按钮的时候就不会再产生什么效果。
下面再演示一个时时监听键盘事件,判断输入的是否是数字,如果不是数字直接动态提示,然后拒绝其输入
test7.htmlfunction test(event){
//用户每按下一个按键,就去判断是不是数字
if(event.keyCode<48 || event.keyCode > 57){
window.alert("您输入的不是一个数字");
return false;
}
}
请输入数字
这里的event就是一个事件对象,他能返回很多的信息,具体请参考相关文档。
补充:事件监听方面的兼容
1. IE使用attachEvent/detachEvent方法来添加和删除事件监听器;w3c使用addEventListener/removeEventListener方法。
2. IE对其事件使用onevent的命名方式,而w3c的是event的命名方式。
3. IE事件监听器内使用的是一个全局的Event对象,而w3c是将event对象作为参数传递给监听器。
4. 为了避免触发默认的事件行为,IE的做法是要求程序员设置Event对象中的returnValue属性值为false,而w3c的做法是执行preventDefault方法。
5. IE没有提供对事件捕获阶段的支持。
6. 要停止事件的传递,IE的做法是设置event对象的cancelBubble为true,而w3c的做法是设置执行stopPropagation方法。
7. IE将事件监听器当做一个独立的函数来调用,而w3c中它是作为对象的方法来调用的,这表示在ie中事件监听器中的this关键字指向的不是事件发生对象而是一个没用的全局对象(window对象)。
8. IE在使用事件监听器方面存在内存泄露问题。在IE浏览器中,如果要为某个元素创建一个事件监听器,并且在监听器中使用该元素,则在用户进入其他页面之前,该监听器以及相关的DOM节点作占据的内存空间不会被释放。
希望本文所述对大家的javascript程序设计有所帮助。
-
oracle删除监听日志
2018-09-17 14:53:57删除监听日志的方法如下: /u01/oracle/diag/tnslsnr/oracle/listener 切换到oracle用户 su - oracle $lsnrctl set log_status off $mv listener.log /backup/ $lsnrctl set log_status on 监听日志启动后就...删除监听日志的方法如下:
/u01/oracle/diag/tnslsnr/oracle/listener
切换到oracle用户
su - oracle
$lsnrctl set log_status off
$mv listener.log /backup/
$lsnrctl set log_status on
监听日志启动后就会自动创建一个全新的listener.log文件,备份好的文件可以删除。
-
删除监听日志方法
2018-04-19 13:59:15删除监听日志的方法如下: 切换到oracle用户 su - oracle $lsnrctl set log_status off $mv listener.log /backup/ $lsnrctl se...删除监听日志的方法如下:
切换到oracle用户
su - oracle
$lsnrctl set log_status off
$mv listener.log /backup/
$lsnrctl set log_status on如果不关闭监听功能就用清空的命令:
>listener.log
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29578568/viewspace-2153096/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29578568/viewspace-2153096/
-
java 删除监听器_事件监听器在被删除后监听
2021-03-03 13:18:24我班上有很多事件监听器,早些时候我问过如何在这些监听器发生一次之后将其杀死,我解决了这个问题 .它在某些情况下有效,但在其他情况下,我遇到了问题 . 例如,我有这个方法有一个事件监听器 .private void ...我班上有很多事件监听器,早些时候我问过如何在这些监听器发生一次之后将其杀死,我解决了这个问题 .
它在某些情况下有效,但在其他情况下,我遇到了问题 . 例如,我有这个方法有一个事件监听器 .
private void startGame() {
HomePage.getCurrentGameID(new HomePage.CallbackID() {
@Override
public void onSuccess(final String currentGameID) {
games.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.child(currentGameID).getValue().equals(1)) {
getResults();
Log.i("FlipCoin", "``startGame() happened");
} else {
return;
}
games.removeEventListener(this);
}
}
我有那个开始游戏的方法,在 onDataChange() 结束时我有 games.removeEventListener(this) . 但有时,即使在执行此操作之后,它仍会运行代码并且我知道这一点,因为每次方法发生时它都会记录到LogCat .
我的代码中只有一个实例,我调用 startGame() ,该实例位于此计时器中
private void runCounter() {
final Runnable counter = new Runnable() {
@Override
public void run() {
Log.i("FlipCoin", "``runCounter() happened");
startGame();
}
}
};
counter.run();
}
我摆脱了许多不必要的代码,所以这些方法可能没有很多实际意义,但它们被用作我问题的例子 .
无论如何,正如你在runCounter()方法中看到的那样,它调用 startGame() 就像它应该的那样,我也有一个方法中的日志,让我知道何时调用这个 runCoutner() 方法 .
奇怪的是 runCounter() 方法只在logcat中记录了一次,但是它保持记录 startGame() ,即使我只在我的代码中调用它一次,并且我在方法结束时删除了监听器 .
为什么会这样,我非常困惑!
Runnable我正在使用(与问题无关)
private void runCounter() {
final TextView headsOrTails = findViewById(R.id.HeadsOrTails);
final Handler handler = new Handler();
final AtomicInteger n = new AtomicInteger(3);
final Runnable counter = new Runnable() {
@Override
public void run() {
headsOrTails.setText("Flipping in: " + Integer.toString(n.get()) + " seconds");
if (n.getAndDecrement() >= 1)
handler.postDelayed(this, 1000);
else {
headsOrTails.setText("Flipping");
Log.i("FlipCoin", "``runCounter() happened");
startGame();
}
}
};
counter.run();
}
-
监听事件和删除监听事件
2021-02-24 08:42:44监听事件 window.addEventListener('scroll', this.handleScroll, true) 移出监听事件 window.removeEventListener('scroll', this.handleScroll, true) -
事件监听 事件监听的兼容 事件监听的删除 监听拖拽
2020-10-06 09:45:48事件监听 <style> .div1{ width: 300px; height: 300px; background: skyblue; } .div2{ width: 200px; height: 200px; background: orange; } .div3{ width: 100px; height: 100px -
删除监听oracle单库彻底删除干净的方法
2013-05-19 21:00:00改章节是一篇关于删除监听的帖子 一、关闭数据库 [oracle@RHEL5]$sqlplus / as sysdba SQL>shutdown immediate; 二、关监听 [oracle@RHEL5]$lsnrctl stop 三、删除oracle_base 我这里切换到了root [root@... -
nodejs socket删除监听
2016-04-13 03:11:11比如我.on('data', function (data) {} 我想把这个on 'data'事件删除怎么写? -
EXT 删除 监听
2012-10-26 13:54:00试了好多 监听事件,只有“valid”事件可以,但是其验证分为好几次,我猜测可能是有首先验证表单有效性,然后验证数据有效性,即,“valid”事件监听一次,触发多次。在加载完成后,如果还存在此监听,很麻烦的,... -
是使用Net Configuration Assistant,配置监听,或者删除监听的时候,一定要点击”完成“。否则,无效
2017-05-24 16:03:30是使用Net Configuration Assistant,配置监听,或者删除监听的时候,一定要点击”完成“。否则,无效。 所以界面上操作成功没成功,还是要去listener.org中去看一下比较保险。 -
【RAC】删除RAC数据库节点(三)——删除监听
2010-10-28 22:12:10本文介绍删除数据库节点的第三个步骤,删除监听。在进行此步删除操作之前,请确保以下删除动作已经完成。《【RAC】删除RAC数据库节点(一)——删除数据库实例》(http://space.itpub.net/519536/... -
开启监听trace和删除监听trc文件后的处理
2018-10-16 15:59:34监听trace 查看监听trace是否打开 Trace Level 为off表示监听trace的状态为关闭 也可以通过show trc_level查看 lsnrctl show trc_level LSNRCTL> show trc_level Connecting to (DESCRIPTION=(ADDRESS... -
要养成删除监听的好习惯,考虑在哪里删除
2011-01-05 17:05:22一定要考虑在哪里删除监听,不然后面的程序很可能会出错 funcMenuBut.addEventListener(FocusEvent.FOCUS_IN,SetInputBoxFocus); funcMenuBut.addEventListener(FocusEvent.FOCUS_OUT,... -
oracle——彻底删除监听
2014-12-08 22:14:13在oracle中删除了监听之后发现服务中仍然存在着监听服务: 如:OracleOraDb10g_home1TNSListenerlistener1 删除注册表中的键值:cmd——regedit 主要是注册表中的/HKEY_LOCAL_MACHINE/SYSTEM/Controlset/... -
Oracle 删除监听程服务
2017-03-26 12:52:00红框内的右键删除 2、开始->运行->输入regidit ->->->->-> 红框内的右键删除 3、开始->运行->输入regidit ->->->->-> 红框内的右键删除 ok,确保全部删除。 ... -
Oracle:删除监听服务
2012-09-12 15:03:22在oracle中删除了监听之后发现服务中仍然存在着监听服务: 我的监听名称是:OracleOraDb10g_home1TNSListenerlistener1 主要是注册表中的/HKEY_LOCAL_MACHINE/SYSTEM/Controlset/Services/OracleOraDb10g_home1... -
addEventListener()与removeEventListener(),追加监听事件和删除监听事件
2020-04-23 09:37:49一、addEventListener()与removeEventListener()用于追加事件和删除追加。所有的DOM节点中都包含这两种方法,并且它们都接受3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。 最后这个布尔值参数是... -
如何删除监听器
2013-08-28 15:48:41由于功能需要,在imageview添加了监听器,,在后面想删除这个监听器怎么删除?? -
vue源码分析之删除监听列表
2020-01-15 15:21:01看注释// remove self from vm's watcher list 移除自身的来自vm的所有监听器 vm是谁? vm是Vue的的父类实例 即Vue.prototype 因此我们只需执行$watch()返回的函数即可,s();