javascript-JS事件处理函数的一些问题

问题描述

JS事件处理函数的一些问题

现代的事件处理函数,其递归的原理是什么?
我写了一个事件切换器,原始的一个div颜色为红色,点击后变成蓝色,再点击又变成红色,就这样切换。代码如下:
HTML代码:

<head>
    <style type="text/css">
        #box{
            width:100px;
            height:100px;
        }
        .red{
            background-color:red;
        }
        .blue{
            background-color:blue;
        }
    </style>
</head>
<body>
    <div id="box" class="red">颜色切换器</div>
</body>

JS代码:

 //事件添加函数
 function addEvent(obj, type, fn){
     var saved = null;
     if(obj.type){
        saved = obj.type;
     }
     obj.type = function(){
        if(saved) saved();
        fn.call(this);
     };
 }

 //事件删除函数
 removeEvent(obj, type){
     if(obj.type) obj.type = null;
 }

 //颜色切换函数
 function toBlue(){
     this.className = 'blue';
     removeEvent(this, 'onclick');
     addEvent(this, 'onclick', toRed);
 }

 function toRed(){
     this.className = 'red';
     removeEvent(this, 'onclick');
     addEvent(this, 'onclick', toBlue);
 }

 //开始执行
 addEvent(window, 'onload', function(){
     var box = document.getElementById('box');
     addEvent(box, 'onclick', toBlue);
 });

当开始执行时,首先点击了div,颜色变蓝,再点击就变红,切换时的运行机理是什么?为何点击后还能继续成功点击?

解决方案

这个和什么递归扯不上关系,无非就是你点了一次,它执行设置颜色的代码,并且把事件关联的处理函数设置为另一个,而另一个函数再设置回来。
remoteevent和addevent就是切换事件。

解决方案二:

js事件处理函数中return的作用
jquery事件处理函数

时间: 2024-09-02 10:24:23

javascript-JS事件处理函数的一些问题的相关文章

js 事件处理函数间的Event物件是否全等_javascript技巧

这个小问题以前就遇到,却没有去总结 现在又遇到,为了得到准确结论,记录下来: 如题:同一事件 多个执行函数间的Event物件是否全等 例如: 复制代码 代码如下: dom.addEvent('click',fna); dom.addEvent('click',fnb); 1:在fna里对Event物件添加的属性,在其后执行的fnb函数里是对于Event物件是否能访问到? 2:执行fna/fnb函数时的Event物件是否全等 Eventfna===Eventfnb ? 标准的文档太长哪里是说明了这

JS中关于事件处理函数名后面是否带括号的问题_javascript技巧

今天总结一个关于事件处理程序的小细节.首先回顾一下事件处理的一些概念. JS中的事件处理(事件绑定)就是让某种或某些事件触发某些活动.有两种常见的形式,分别是DOM Level 0 和DOM Level 2.这两种方式最大的区别就在于DOM 0级事件处理只能用于事件冒泡,而DOM 2级事件处理却可以通过设置第三个参数来分别支持事件冒泡和事件捕获. DOM 0级事件处理一般是直接把一个函数分配给一个事件处理程序,既可以在元素中直接分配一个事件处理程序,如方式一所示;也可以在脚本中把函数分配给事件处

JavaScript函数的一些注意要点小结及js匿名函数_javascript技巧

下面给大家介绍javascript函数 函数的基本语法是: function functionName(arg0,arg1,...,argN) { statements } 下面是个示例: function str(name,age){ document.write("hello my name is " + name + ". and i am " + age + " years old."); } str(" oliver"

Ajax实战:绑定事件处理函数代码

JavaScript文件(代码清单4-3)采用编程方式将事件绑定到键上. 代码清单4-3 musical.js window.onload调用了assignKeys()函数(可以在这个文件中直接定义window. onload,但是这限制了它的可移植性).通过唯一的ID来发现keyboard元素,然 后使用getElementsByTagName()遍历访问其内部所有的DIV元素.这需要知道一 些关于页面结构的知识,但是它允许页面设计师自由地在页面中将键盘DIV以希 望的方式任意移动. 表示键的

浅析 JavaScript 中的 函数 currying 柯里化

原文:浅析 JavaScript 中的 函数 currying 柯里化 何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字命名). 柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果.因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程. 柯里化一个求和函数 按照分步求值,我们看一个

js使用函数绑定技术改变事件处理程序的作用域_javascript技巧

第一种,也是 最常见的,就是直接在html标签里面通过指定事件处理程序同名的HTML属性来注册事件,代码如下: 复制代码 代码如下: function eventHandler() { alert("当前作用域是 input 元素本身"); } <input type="button" value="单击我" onclick="eventHandler(this)"/> 第二种方式就是将一个函数赋值给一个事件处理程

深入理解JS addLoadEvent函数_javascript技巧

首先是addLoadEvent函数的代码清单: function addLoadEvent(func) { var oldonload=window.onload; if(typeof window.onload!='function') { window.onload=func; } else { window.onload=function() { oldonload(); func(); } } } 理解起来就是: 1.把现有的window.onload事件处理函数的值存入变量 oldon

JavaScript中调用函数的几种方法

当浏览器中添加新的API功能,尽管这个API提供了更多的功能和权限,我认为他们可能会给我的项目带来更多困惑,无论是API的问题还是项目编写的构想,我们都可以尝试去使用它,你一定会遇到不符合你项目程序的错误代码.使用try/catch运行这些API,它使代码更清洁.副作用少. JavaScript中安全的调用函数方法 我们在控制台为用户输出一段话.  代码如下 复制代码 function attempt(fn, args, binding) {     try {         return f

prototype.js常用函数和用法

函数名  解释  举例  Element.toggle  交替隐藏或显示  Element.toggle(''div1'',''div2'')  Element.hide  隐藏  Element.hide(''div1'',''div2'')  Element.show 显示  Element.show(''div1'',''div2'')  Element.remove  删除  Element.remove(''div1'',''div2'')  Element.getHeight  取得