`

在什么时候才会用到fireEvent方法呢?

 
阅读更多

本文转自:http://www.cnblogs.com/birdshome/archive/2005/04/07/128182.html

 

 在DHTML开发中,微软在其DOM中为每个元素实现了一个fireEvent方法。我们知道HTML的事件onXXX可以由系统(IE环境)来管理和触发,也可以直接执行事件的handler,比如onclick,如果被赋予事件处理函数,我们可以用element.onclick()来执行事件处理函数。那么fireEvent用来干嘛呢?

    在MSDN中fireEvent的描述很简单:Fires a specified event on the object.
    bFired = object.fireEvent(sEvent [, oEventObject])

    并且MSDN给出了一个使用fireEvent的示例:

<HTML>
    <HEAD>
        <SCRIPT>
        function fnFireEvents()
        {
            div.innerText = "The cursor has moved over me!";
            btn.fireEvent("onclick");
        }
        </SCRIPT>
    </HEAD>
    <BODY>
        <h1>Using the fireEvent method</h1>
        By moving the cursor over the DIV below, the button is clicked.
        <DIV ID="div" onmouseover="fnFireEvents();">
            Mouse over this!
        </DIV>
        <BUTTON ID="btn" ONCLICK="this.innerText='I have been clicked!'">Button</BUTTON>
    </BODY>
</HTML>

    这个示例非常的简单,也完全说明了fireEvent的用法。不过这个示例有一点误导我们,从而让我们不容易发现frieEvent更有价值的使用方法。由于button的onclick事件被赋予语句:this.innerText = 'I have been clicked!',这里很容易误导我们,fireEvent产生的是执行了btn.onclick()的效果。嗯,确实是这个效果,但是意义却完全不同,btn.onclick()只是一个函数调用,它的执行必须依赖于用户对其赋值,否则btn.onclick为null,是不能执行btn.onclick()的。而fireEvent('onclick')的效果,"等同于"鼠标在button元素上进行了点击。

    由于IE的事件处理是bubble up方式,fireEvent(sEvent)就显得更加的有意义了,如果我们在一个table元素<table>中监听事件,比如onclick,当点击不同的td做出不同的响应时。如果使用程序来模拟,只能使用fireEvent这种方式,示例如下:

<table border="1" onclick="alert(event.srcElement.innerText);">
    <tr>
        <td id="abc">abc</td>
        <td id="def">def</td>
    </tr>
</table>
<button onclick="abc.fireEvent('onclick')">
    abc</button>
<button onclick="def.fireEvent('onclick')">
    def</button>
    使用abc.onclick()和def.onclick()将得到"Object doesn't support this property or method"异常。


    知道了fireEvent的用法,那么我们用它来做什么呢?在开发具有复杂事件处理动作组件时。有时我们需要从程序中去触发一个本身因该鼠标或键盘触发的事件,比如在TreeView控件中,我们一般是使用鼠标点击来Expand&Collapse一个结点,如果我们要用程序代码来实现这个操作怎么办呢?当然直接执行事件处理函数是可以的,不过如果事件处理函数依赖于event变量中的状态值,那么就必须使用fireEvent方法。

    原来我曾经说过,因该把事件处理的函数封装起来,便于直接调用。比如上面说到的TreeView节点的Expand和Collapse,我在TreeView控件中都是把它们封装成两个函数Expand和Collapse,在节点被点击时,执行:
 OpIcon.onclick = function()
 {
     var objNode = this.Object;
     if ( objNode.m_IsExpanded )
         objNode.Collapse();
     else
         objNode.Expaned();
 }
    这样一来,在程序中控制Expand和Collapse也就是分别执行函数而已。不过后来发现既然DOM中有fireEvent方法,似乎我在"动态载入数据的无刷新TreeView控件(4)"中的某些想法也不是很必要了。


 

分享到:
评论

相关推荐

    同时兼容IE和FireFox的事件处理event代码--添加文件上传例子

    在文件上传的例子中,我们通常会用到`&lt;input type="file"&gt;`元素,允许用户选择本地文件进行上传。在处理文件选择事件时,IE和非IE浏览器的事件处理方式有区别: 1. **非IE浏览器(如Firefox)**:使用`...

    给moz-firefox下添加IE方法和属性

    在IECN看到心云写的关于互换select的JS,因里面用到removeNode和swapNode等方法,导致在Firefox下无效。刚刚Google了下,发现可以通过自定义原型来修正只在IE下有效的属性与方法。 原文参考:...

    项目当中用到的动态生成下拉菜单

    对于动态生成的元素,如果在元素生成后才绑定事件,可能在某些浏览器(如早期版本的Firefox)中无法触发。为了解决这个问题,可以使用`event delegation`,即在父元素上绑定事件,由事件冒泡来处理动态生成元素的...

    火狐浏览器(firefox)下获得Event对象以及keyCode

    代码如下:var isie = (document.all) ? true:false; var key; var ev;... } 这个时候可以alert(key) 看看, 但是 要是想用到 ev.returnValue = true; // IE ev.preventDefault(); // Mozilla Firefox

    表单Form的submit事件不响应的解决方法

    在上述代码中,首先检查了浏览器是否支持`fireEvent`方法,如果支持,就调用该方法来触发`onsubmit`事件。如果不支持,但支持`createEvent`方法,则创建一个`HTMLEvents`类型的事件,并使用`initEvent`初始化事件,...

    js触发select onchange事件的小技巧

    在老旧的浏览器中可以使用`fireEvent`方法,而在现代浏览器中,建议使用`dispatchEvent`方法来替代。这些方法能够确保程序化地控制`select`元素的行为,并且在浏览器不认为是用户交互的情况下,也能正确地执行绑定在...

    在b/s开发中经常用到的javaScript技术整理

    在B/S架构开发中,JavaScript是一种非常重要的前端脚本语言,它被广泛应用于网页的交互设计、数据验证、页面特效等方面。本文将详细介绍在B/S开发中常用的JavaScript技术及其应用场景。 ### 一、验证类 #### 1. ...

    layer弹窗在键盘按回车将反复刷新的实现方法

    在IE等旧版浏览器中,可以通过`window.event`获取,而在其他浏览器(如Firefox、Chrome等)中,事件对象是作为参数传递给事件处理函数的。 在捕捉到键盘事件后,还需要判断该事件是否是回车键的按下。这是通过检查`...

    Set-as-home-page-code.doc.zip_Home Home_自动弹出窗口

    在网页设计和开发中,有时候为了提供用户便捷的体验,我们可能会希望用户能够方便地将网站设置为他们的浏览器主页。这个“Set-as-home-page-code.doc.zip_Home Home_自动弹出窗口”文件就包含了实现这一功能的相关...

    js兼容问题 详解

    做BS开发就难免会用到javascript,而每个浏览器对javascript的支持有不同。这就需要我们程序员去兼容他们,不然有些浏览器就无法运行我们的代码。就会造来客户的投诉,如果让BoSS知道了,这可不太好哦。下面是兼容IE...

    判断事件是不是发生在某组件中的 JS 函数

    这种情况下,我们就需要用到判断事件是否发生在某组件中的JS函数。以下将详细介绍如何实现这一功能。 首先,我们需要获取浏览器信息,因为不同的浏览器处理事件的方式可能有所不同。在提供的代码中,创建了一个名为...

    【JavaScript源代码】教你javascript如何获取指针的位置.docx

    这需要用到`event.offsetX`和`event.offsetY`,或者在Firefox和Safari中使用`event.layerX`和`event.layerY`。然而,这两个属性并不一致:Firefox和Safari将位置基于元素的边框外壁,其他浏览器则是基于边框内壁。...

    Div滚动条随鼠标滚动js版(由网友JQuery版改写而成)

    4. **浏览器兼容性处理**:由于不同浏览器对滚动事件和滚动条的支持程度不同,编写JavaScript代码时需要考虑跨浏览器兼容性,可能需要用到像`event.wheelDelta`(旧版本Firefox和IE)或`event.deltaY`(现代浏览器)...

    asp.net的Treeview的Checkbox选中父节点,选中全部子节点并且展开

    在用户权限管理模块中,我们通常会用到 TreeView 控件来展示系统的菜单结构。对于每个菜单项,我们可能需要一个复选框来表示是否允许该用户访问此菜单。当用户选中某个父级菜单时,我们期望该父级菜单下的所有子菜单...

    FireFox与IE 下js兼容触发click事件的代码

    从提供的文件信息来看,本文主要涉及了跨浏览器环境下JavaScript代码的兼容性问题,特别是如何在FireFox和Internet Explorer(IE)中触发click事件。以下是对这些知识点的详细介绍。 ### JavaScript跨浏览器兼容性...

    mootools 中文文档

    此外,MooTools还提供了一些特殊的事件处理函数,如`fireEvent`,可以模拟触发事件。 4. 动画效果:Fx模块提供了强大的动画功能,包括平滑的CSS属性变化、透明度调整、大小缩放等。你可以创建自定义动画,控制速度...

    中商情报网jquery相册代码.zip

    在相册中,可能会用到`fadeIn()`、`fadeOut()`等方法来实现图片的淡入淡出效果,增强用户体验。 6. **响应式设计** 考虑到不同设备的屏幕尺寸,现代的相册代码通常会采用响应式设计,以适应手机、平板和桌面电脑等...

    JS获得鼠标位置(兼容多浏览器ie,firefox)脚本之家修正版

    5. JavaScript中常见的事件:文档中没有具体说明,但是可以合理推测,要获取鼠标位置,需要用到与鼠标事件相关的JavaScript事件,如onclick、onmousemove等,这些事件在用户与网页交互时触发,并能调用相关的处理...

    基于JavaScript获取鼠标位置的各种方法

    在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,令人失望的是不同的浏览器下会有不同的结果甚至是有的浏览器下没结果,这篇文章就上鼠标点击位置坐标获取做一些简单的总结,没特殊...

Global site tag (gtag.js) - Google Analytics