`
onTheJavaWay
  • 浏览: 18599 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

注册带参数的事件处理函数

阅读更多

在非简单事件模型中,给一个HTML注册事件处理函数时采用如下的方式:element.on

clik=funtionName;

这里element为要进行事件注册的HTML元素,onclik为注册的事件类型,funtionName为处理函数的名字(即函数引用)。例如:

 

<script>

    function myFunction(){alert("调用了事件处理函数");}

    document.getElementById("myButton").onclik=myFunction;      

    //为id为myButton的元素注册onclik事件的处理函数为myFunction

</script>
 

注意到等号右边只是一个函数引用,不能带括号,因而也不能带参数 ,例如写成下列的写法是错误的:

 

<script>

    function myFunction(){alert("调用了事件处理函数");}

    document.getElementById("myButton").onclik=myFunction();                      //不能带括号

    document.getElementById("myButton").onclik=myFunction("hello!");            //不能带括号因而不能带参数

</script>
 

上述代码在运行时,IE中会报错:未实现错误;在Firefox中则不报错正常运行 ,但是得不到运行结果

但是很多时候我们需要在事件被触发时给处理函数传递参数,那么应该怎么实现?有以下几种方法:

(一)、将注册改为采用简单事件模型,这种模型下给HTML元素注册事件处理函数是在HTML标记中完成,这时可以给处理函数传递参数。例如:

 

<button onclick="myFunction('hello!')"></button>

<script>

    function myFunction(msg){alert(msg);}

</script>
 

(二)、仍旧使用非简单事件模型,加上匿名函数的使用,即将带参数的、包含实际的处理逻辑的函数封装到一个不带参数的外层函数中,然后将此外层函数注册为事件处理函数。这种方法用的较多。例如:

 

<script>

    function myFunction(msg){alert(msg);}

    document.getElementById("myButton").onclik=function() {myFunction("hello!");}                           

    //为id为myButton的元素注册onclik事件的处理函数,使用匿名函数封装实际的处理函数

</script>
 

  (三)、使用Function动态创建函数,在创建函数时传入参数

 

<script>

    function myFunction(msg){alert(msg);}

    var  proper="hello";                                            //参数

    document.getElementById("myButton").onclik=new Function("myFunction("+proper+")");

   //为id为myButton的元素注册onclik事件的处理函数,是一个函数体为"myFunction("+proper+")"的匿名函数

</script>
 

 这里解释一下动态创建函数(即实例化一个函数对象)的写法:var funcName=new Function(p1,p2,...,pn,body); new Function的参数类型都是字符串,p1到pn表示所创建函数的参数名称列表,body表示所创建函数的函数体语句,funcName就是所创建函数 的名称。p1到pn可以省略,表示创建一个没有参数的函数,如上面就创建了一个没有参数只有函数体的函数。

分享到:
评论

相关推荐

    怎么往SetTimer的回调函数传递参数

    Windows 消息处理机制与 SetTimer 回调函数参数传递 在 Windows 编程中,消息处理机制是了解 Windows 操作系统的关键。Windows 是一种消息驱动的系统,它会将用户的输入、鼠标点击、键盘输入等事件转换为消息,然后...

    C# 调用带参数EXE文件及带启动参数EXE制作

    3. 检查启动参数:在`Main`函数中,你需要检查是否有参数被传入,并对它们进行适当的处理: ```csharp static void Main(string[] args) { Application.EnableVisualStyles(); Application....

    函数作为参数

    例如,当我们注册一个点击事件时,我们实际上是在给事件处理器传递一个函数,当事件触发时,这个函数就会被调用。 此外,闭包也是函数作为参数的一个实例。闭包允许函数访问并操作其外部作用域的变量,即使在其外部...

    SqlServer自定义多参数聚合函数实例代码

    然而,SQL Server的标准内置聚合函数可能无法满足所有复杂的数据处理需求,这时我们就需要自定义聚合函数。标题提到的"SqlServer自定义多参数聚合函数实例代码"就是针对这种情况提供的一种解决方案。 自定义聚合...

    PowerScript语言事件与函数

    2. **事件模型**:PowerScript如何支持事件驱动编程,包括事件的声明、注册和处理。 3. **函数的类型**:除了用户自定义函数外,还有系统函数和过程,它们各自的角色和用法。 4. **参数传递**:PowerScript支持按...

    把多个JavaScript函数绑定到onload事件处理函数上的方法

    这个函数接受一个参数,即需要在页面加载完成后执行的函数名,并确保这个函数被正确地添加到`window.onload`事件处理函数中,即使已经有其他函数在那里注册过。 `addLoadEvent`的工作原理如下: 1. 获取当前`...

    ocx中事件函数,调用js中的回调函数

    标题“ocx中事件函数,调用js中的回调函数”指的是在OCX控件中定义的事件处理函数如何与JavaScript进行交互,调用JS中的回调函数。这种交互方式通常发生在浏览器环境中,如ActiveX控件嵌入到HTML页面中,实现客户端...

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

    在本文中,我们会深入探讨事件处理函数名后面是否带括号的问题,这实际上关系到了函数的调用时机和方式。 首先,要明白JavaScript中存在两种主要的事件处理模型:DOM Level 0 和 DOM Level 2。这两种模型在绑定事件...

    C#中的事件处理程序

    事件处理程序通常由委托(delegate)类型定义,该委托定义了一个方法签名,该签名描述了处理事件时需要调用的方法的参数和返回类型。 首先,我们需要了解什么是委托。在C#中,委托是引用类型,可以用来封装指向一个...

    python函数装饰器之带参数的函数和带参数的装饰器用法示例

    这个返回的装饰器会处理函数`hello`,将它注册为一个路由处理函数。 通过上述讨论,可以了解到带参数的装饰器比普通装饰器更复杂,但功能也更加强大。它可以让装饰器接收任意数量的参数,以适应不同的使用场景。从...

    前端学习笔记,做一个简单的网站-请自定义一个注册事件的兼容函数,要求兼容三种注册事件方法,学习代码

    这个方法接收两个参数:一个是事件名,另一个是事件处理函数。例如,注册点击事件可以这样写: ```javascript document.getElementById('myButton').addEventListener('click', function() { alert('Button ...

    在窗体间通过消息传递参数和事件处理的Demo

    该函数会将一个消息直接发送到指定窗口的处理函数,并等待处理完毕后再返回。这意味着发送消息的线程会被阻塞,直到接收方处理完消息。这对于需要立即得到响应或者希望在消息被处理后进行其他操作的情况非常有用。...

    事件处理机制之触屏事件.

    1. addTargetedDelegate()函数:这是在CCDirector类中用于注册触屏事件监听器的关键函数。它接收三个参数:目标触屏事件委托、优先级和是否吞噬触摸事件。当设置为吞噬事件时,一旦该委托处理了事件,就不会再将事件...

    javascript打造跨浏览器事件处理机制[Blue-Dream出品]

    - `handler`:要注册的事件处理函数。 #### 事件移除 `detachEvent`与`attachEvent`对应: ```javascript element.detachEvent(eventName, handler); ``` ### 兼容性的处理 为了兼容W3C标准和IE浏览器,开发者...

    使用C语言写的回调函数

    回调函数是一种设计模式,它使得调用者能够将一个函数作为参数传递给其他函数,由被调用者在执行完某些操作后或者在特定事件发生时,调用这个传递的函数。这种方式增强了程序的灵活性,因为调用的时机和方式由被调用...

    手动回调函数

    回调函数在VB中的应用非常广泛,例如在事件处理中,你可以定义一个事件处理函数,然后将它注册到特定的事件上,当事件触发时,这个回调函数会被自动调用。此外,在多线程编程中,也可以通过回调来处理线程间的通信和...

    silverlight 3.0事件处理

    事件是对象之间通信的一种方式,当某个事件发生时,会触发已注册的事件处理函数。 2. **事件和委托** - **事件**:事件是对象公开的特定行为,如按钮的Click事件。当用户点击按钮时,该事件被触发。 - **委托**:...

    C++将类的成员函数作为回调函数

    在C++编程中,回调函数是一种常见的设计模式,它允许程序在特定的事件或条件下调用一个预先注册的函数。然而,当涉及到类的成员函数时,事情变得稍微复杂了一些。这是因为成员函数通常需要访问所属类的`this`指针来...

    易语言取API函数地址

    它需要两个参数:一个是API函数的名称,另一个是加载该函数所在的库(DLL)的名称。 例如,如果我们想要获取`GetDword`函数的地址,首先需要知道该函数存在于哪个DLL中。`GetDword`通常是Windows API的一部分,存在...

    OSG中的键盘事件处理

    4. 提供一个 `addFunction` 方法,让用户注册按键事件和对应的函数。这个方法应该接受键值、按键状态和响应函数作为参数,并将其添加到内部的映射或列表中。 5. 当用户按下或释放一个键时,`handle` 方法会被调用。...

Global site tag (gtag.js) - Google Analytics