精华内容
下载资源
问答
  • js Event

    千次阅读 2008-10-02 21:43:00
    js Event2008年05月11日 星期日 下午 05:55以下以 IE 代替 Internet Explorer,以 MF 代替 Mozzila Firefox1. document.form.item 问题 (1)现有问题: 现有代码中存在许多 document.formName.item("itemName") ...
    js Event
    2008年05月11日 星期日 下午 05:55

    以下以 IE 代替 Internet Explorer,以 MF 代替 Mozzila Firefox

    1. document.form.item 问题
         (1)现有问题:
             现有代码中存在许多 document.formName.item("itemName") 这样的语句,不能在 MF 下运行
         (2)解决方法:
             改用 document.formName.elements["elementName"]
         (3)其它
             参见 2

    2. 集合类对象问题
         (1)现有问题:
             现有代码中许多集合类对象取用时使用 (),IE 能接受,MF 不能。
         (2)解决方法:
             改用 [] 作为下标运算。如:document.forms("formName") 改为 document.forms["formName"]。
             又如:document.getElementsByName("inputName")(1) 改为 document.getElementsByName("inputName")[1]
         (3)其它

    3. window.event
         (1)现有问题:
             使用 window.event 无法在 MF 上运行
         (2)解决方法:
             MF 的 event 只能在事件发生的现场使用,此问题暂无法解决。可以这样变通:
             原代码(可在IE中运行):
                 <input type="button" name="someButton" value="提交" οnclick="javascript:gotoSubmit()"/>
                 ...
                 <script language="javascript">
                     function gotoSubmit() {
                         ...
                         alert(window.event);     // use window.event
                         ...
                     }
                 </script>

             新代码(可在IE和MF中运行):
                 <input type="button" name="someButton" value="提交" οnclick="javascript:gotoSubmit(event)"/>
                 ...
                 <script language="javascript">
                     function gotoSubmit(evt) {
                         evt = evt ? evt : (window.event ? window.event : null);
                         ...
                         alert(evt);              // use evt
                         ...
                     }
                 </script>
             此外,如果新代码中第一行不改,与老代码一样的话(即 gotoSubmit 调用没有给参数),则仍然只能在IE中运行,但不会出错。所以,这种方案 tpl 部分仍与老代码兼容。

    4. HTML 对象的 id 作为对象名的问题
         (1)现有问题
             在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。
         (2)解决方法
             用 getElementById("idName") 代替 idName 作为对象变量使用。

    5. 用idName字符串取得对象的问题
         (1)现有问题
             在IE中,利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象,在MF 中不能。
         (2)解决方法
             用 getElementById(idName) 代替 eval(idName)。

    6. 变量名与某 HTML 对象 id 相同的问题
         (1)现有问题
             在 MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE 中不能。
         (2)解决方法
             在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。
             此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。
         (3)其它
             参见 问题4

    7. event.x 与 event.y 问题
         (1)现有问题
             在IE 中,event 对象有 x, y 属性,MF中没有。
         (2)解决方法
             在MF中,与event.x 等效的是 event.pageX。但event.pageX IE中没有。
             故采用 event.clientX 代替 event.x。在IE 中也有这个变量。
             event.clientX 与 event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。

             如果要完全一样,可以稍麻烦些:
             mX = event.x ? event.x : event.pageX;
             然后用 mX 代替 event.x
         (3)其它
             event.layerX 在 IE 与 MF 中都有,具体意义有无差别尚未试验。


    8. 关于frame
        (1)现有问题
              在 IE中 可以用window.testFrame取得该frame,mf中不行
        (2)解决方法
              在frame的使用方面mf和ie的最主要的区别是:
    如果在frame标签中书写了以下属性:
    <frame src="xx.htm" id="frameId" name="frameName" />
    那么ie可以通过id或者name访问这个frame对应的window对象
    而mf只可以通过name来访问这个frame对应的window对象
    例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问
    ie: window.top.frameId或者window.top.frameName来访问这个window对象
    mf: 只能这样window.top.frameName来访问这个window对象

    另外,在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签
    并且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内容
    也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内容
    关于frame和window的描述可以参见bbs的‘window与frame’文章
    以及/test/js/test_frame/目录下面的测试
    ----adun 2004.12.09修改

    9. 在mf中,自己定义的属性必须getAttribute()取得
    10.在mf中没有   parentElement parement.children   而用
                    parentNode parentNode.childNodes
        childNodes的下标的含义在IE和MF中不同,MF使用DOM规范,childNodes中会插入空白文本节点。
       一般可以通过node.getElementsByTagName()来回避这个问题。
        当html中节点缺失时,IE和MF对parentNode的解释不同,例如
        <form>
        <table>
             <input/>
        </table>
        </form>
        MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点

       MF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)

    11.const 问题
       (1)现有问题:
          在 IE 中不能使用 const 关键字。如 const constVar = 32; 在IE中这是语法错误。
       (2)解决方法:
          不使用 const ,以 var 代替。

    12. body 对象
        MF的body在body标签没有被浏览器完全读入之前就存在,而IE则必须在body完全被读入之后才存在

    13. url encoding
    在js中如果书写url就直接写&不要写&amp;例如var url = 'xx.jsp?objectName=xx&amp;objectEvent=xxx';
    frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器
    一般会服务器报错参数没有找到
    当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为&amp;
    一般MF无法识别js中的&amp;


    14. nodeName 和 tagName 问题
       (1)现有问题:
          在MF中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。在 IE 中,nodeName 的使用好象
          有问题(具体情况没有测试,但我的IE已经死了好几次)。
       (2)解决方法:
          使用 tagName,但应检测其是否为空。

    15. 元素属性
        IE下 input.type属性为只读,但是MF下可以修改


    16. document.getElementsByName() 和 document.all[name] 的问题
       (1)现有问题:
          在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素(是否还有其它不能取的元素还不知道)。

    --------------------------------------------------------------------------------------------------------

    发现几处IE与firefox的js和css几处不同点2007-09-08 23:11终于完成了偶的拖动窗口,花了近15个小时,庆祝一下(*^__^*);以前写了IE下的功能,于是又写了firefox下的功能,在firefox上花了很多时间,发现了firefox中几处与IE中不同的地方:

    1.firefox不能对innerText支持,也不知道为什么。firefox支持innerHTML但却不支持innerText,所以上网查了一下,原来它改支持textContent来实现innerText,不过实现得没有那么好,默认把多余的空格也保留了。如果不用textContent,如果字符串里面不包含HTML代码也可以用innerHTML代替

    2.禁止选取网页内容:
    在IE中一般用js:obj.onselectstart=function(){return false;}
    而firefox用CSS:-moz-user-select:none

    3.滤镜的支持(例:透明滤镜):
    IE:filter:alpha(opacity=10);
    firefox:-moz-opacity:.10;

    4.捕获事件:
    IE:obj.setCapture() 、obj.releaseCapture()
    Firefox: document.addEventListener("mousemove",mousemovefunction,true);
        document.removeEventListener("mousemove",mousemovefunction,true);

    5.获取鼠标位置:
    IE:event.clientX、event.clientY
    firefox:需要事件函数传递事件对象
        obj.οnmοusemοve=function(ev){
              X= ev.pageX;Y=ev.pageY;
        }

    6.DIV等元素的边界问题:
    比如:设置一个div的CSS::{width:100px;height:100px;border:#000000 1px solid;}
    IE中:div的宽度(包括边框宽度):100px,div的高度(包括边框宽度):100px;
    而firefox:div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;


    所以在做这个兼容IE和firefox的拖动窗口时,在js和css的写法上要动点脑筋,给大家两个小技巧
    一.判断浏览器类型:
    var isIE=document.all? true:false;
    我写了一个变量,如果支持document.all语法那么isIE=true,否则isIE=false

    二.在不同浏览器下的CSS处理:
    一般可以用!important来优先使用css语句(仅firefox支持)
    比如:{border-width:0px!important;border-width:1px;}
    在firefox下这个元素是没有边框的,在IE下边框宽度是1px

    又发现几处XHTML与正常状态下的JS、CSS的区别
    前阶段写了兼容IE/Firefox的拖动窗口发现了这两个浏览器的几处区别:发现几处IE与firefox的js和css几处不同点【原】
    今天又写了兼容XHTML的版本,因为现在不是流行web标准嘛,偶不能落后啊!再说现在ASP.NET中的所有页面都是应用XHTML标准的,如果在布局页面中删了这句标准代码,里面的布局和控件visual studio就不显示了。
    呵呵,在网页开头加了这个代码就是所谓的XHTML标准了<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
    http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    改了一下JS和CSS,调试了N次,发现了XHTML标准下的几个不同点:
    1.document.documentElement 与 document.body
    代码中设置页面的CSS时一定要用:document.documentElement
    比如:document.documentElement.style.overflow='hidden';
    overflow-X、overflow-Y 这两个分坐标属性XHTML是不支持的;

    2.在取得网页窗口区域和获取滚动条位移距离时也要用document.documentElement
    即这四个属性(clientWidth、clientHeight、scrollLeft、scrollTop)一定要用document.documentElement
    但是document.body.appendChild()和document.body.removeChild()却是可以用的,而且用document.documentElement.appendChild()和document.documentElement.removeChild()代替却会报错;

    **********所以我总结了一下仅clientWidth、clientHeight、scrollLeft、scrollTop和document.documentElement.style时才用document.documentElement

    3.呵呵,加了这个标准以后IE的边框问题也出现了变化,现在和firefox趋于一致了,是不是这个就是XHTML的优点——跨浏览器的标准
    上篇文章提到:
    设置一个div的CSS::{width:100px;height:100px;border:#000000 1px solid;}
    IE中(正常情况):div的宽度(包括边框宽度):100px,div的高度(包括边框宽度):100px;
    firefox(正常情况)::div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;

    加了XHTML标准后的(IE和firefox打和了,^_^):
    IE中(XHTML):div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;
    firefox(XHTML)::div的宽度(包括边框宽度):102px,div的高度(包括边框宽度):102px;
    ------------------------------------------------------------------------------------------

    应用背景:
    需要打开一个子窗体,将需要修改的数据传到子窗体,然后将子窗体中修改过的数据,传回父窗体。(父窗体不能被刷新)
    例如:父窗体只供用户查看,子窗体用于修改。
    方法:
    父窗体:
    dim xxx '返回值
    dim yyy '传到子窗体的参数
    var xxx = ShowModalDialog('xxx.asp','yyy','dialogWidth:100px;DialogHeight=290px;status:no')
    子窗体:
    dim yyy '从父窗体传来的参数
    dim xxx '传回父窗体的参数
    yyy = window.dialogArguments
    xxx = window.returnValue

    ------------------------------------------------------


    js 触发事件大全




    事件 浏览器支持 解说
    一般事件 onclick IE3、N2 鼠标点击时触发此事件
    ondblclick IE4、N4 鼠标双击时触发此事件
    onmousedown IE4、N4 按下鼠标时触发此事件
    onmouseup IE4、N4 鼠标按下后松开鼠标时触发此事件
    onmouseover IE3、N2 当鼠标移动到某对象范围的上方时触发此事件
    onmousemove IE4、N4 鼠标移动时触发此事件
    onmouseout IE4、N3 当鼠标离开某对象范围时触发此事件
    onkeypress IE4、N4 当键盘上的某个键被按下并且释放时触发此事件.
    onkeydown IE4、N4 当键盘上某个按键被按下时触发此事件
    onkeyup IE4、N4 当键盘上某个按键被按放开时触发此事件
    页面相关事件 onabort IE4、N3 图片在下载时被用户中断
    onbeforeunload IE4、N 当前页面的内容将要被改变时触发此事件
    onerror IE4、N3 出现错误时触发此事件
    onload IE3、N2 页面内容完成时触发此事件
    onmove IE、N4 浏览器的窗口被移动时触发此事件
    onresize IE4、N4 当浏览器的窗口大小被改变时触发此事件
    onscroll IE4、N 浏览器的滚动条位置发生变化时触发此事件
    onstop IE5、N 浏览器的停止按钮被按下时触发此事件或者正在下载的文件被中断
    onunload IE3、N2 当前页面将被改变时触发此事件
    表单相关事件 onblur IE3、N2 当前元素失去焦点时触发此事件
    onchange IE3、N2 当前元素失去焦点并且元素的内容发生改变而触发此事件
    onfocus IE3 、N2 当某个元素获得焦点时触发此事件
    onreset IE4 、N3 当表单中RESET的属性被激发时触发此事件
    onsubmit IE3 、N2 一个表单被递交时触发此事件
    滚动字幕事件 onbounce IE4、N 在Marquee内的内容移动至Marquee显示范围之外时触发此事件
    onfinish IE4、N 当Marquee元素完成需要显示的内容后触发此事件
    onstart IE4、 N 当Marquee元素开始显示内容时触发此事件
    编辑事件 onbeforecopy IE5、N 当页面当前的被选择内容将要复制到浏览者系统的剪贴板前触发此事件
    onbeforecut IE5、 N 当页面中的一部分或者全部的内容将被移离当前页面[剪贴]并移动到浏览者的系统剪贴板时触发此事件
    onbeforeeditfocus IE5、N 当前元素将要进入编辑状态
    onbeforepaste IE5、 N 内容将要从浏览者的系统剪贴板传送[粘贴]到页面中时触发此事件
    onbeforeupdate IE5、 N 当浏览者粘贴系统剪贴板中的内容时通知目标对象
    oncontextmenu IE5、N 当浏览者按下鼠标右键出现菜单时或者通过键盘的按键触发页面菜单时触发的事件
    oncopy IE5、N 当页面当前的被选择内容被复制后触发此事件
    oncut IE5、N 当页面当前的被选择内容被剪切时触发此事件
    ondrag IE5、N 当某个对象被拖动时触发此事件 [活动事件]
    ondragdrop IE、N4 一个外部对象被鼠标拖进当前窗口或者帧
    ondragend IE5、N 当鼠标拖动结束时触发此事件,即鼠标的按钮被释放了
    ondragenter IE5、N 当对象被鼠标拖动的对象进入其容器范围内时触发此事件
    ondragleave IE5、N 当对象被鼠标拖动的对象离开其容器范围内时触发此事件
    ondragover IE5、N 当某被拖动的对象在另一对象容器范围内拖动时触发此事件
    ondragstart IE4、N 当某对象将被拖动时触发此事件
    ondrop IE5、N 在一个拖动过程中,释放鼠标键时触发此事件
    onlosecapture IE5、N 当元素失去鼠标移动所形成的选择焦点时触发此事件
    onpaste IE5、N 当内容被粘贴时触发此事件
    onselect IE4、N 当文本内容被选择时的事件
    onselectstart IE4、N 当文本内容选择将开始发生时触发的事件
    数据绑定 onafterupdate IE4、N 当数据完成由数据源到对象的传送时触发此事件
    oncellchange IE5、N 当数据来源发生变化时
    ondataavailable IE4、N 当数据接收完成时触发事件
    ondatasetchanged IE4、N 数据在数据源发生变化时触发的事件
    ondatasetcomplete IE4、N 当来子数据源的全部有效数据读取完毕时触发此事件
    onerrorupdate IE4、N 当使用onBeforeUpdate事件触发取消了数据传送时,代替onAfterUpdate事件
    onrowenter IE5、N 当前数据源的数据发生变化并且有新的有效数据时触发的事件
    onrowexit IE5、N 当前数据源的数据将要发生变化时触发的事件
    onrowsdelete IE5、N 当前数据记录将被删除时触发此事件
    onrowsinserted IE5、N 当前数据源将要插入新数据记录时触发此事件
    外部事件 onafterprint IE5、N 当文档被打印后触发此事件
    onbeforeprint IE5、N 当文档即将打印时触发此事件
    onfilterchange IE4、N 当某个对象的滤镜效果发生变化时触发的事件
    onhelp IE4、N 当浏览者按下F1或者浏览器的帮助选择时触发此事件
    onpropertychange IE5、N 当对象的属性之一发生变化时触发此事件
    onreadystatechange IE4、N 当对象的初始化属性值发生变化时触发此事件


    ===========================================

    展开全文
  • JS Event对象详解

    千次阅读 2018-02-11 23:45:30
    JS Event对象详解 参考资料: js添加事件和移除事件:addEventListener()与removeEventListener() Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的...

    JS Event对象详解

    参考资料:
    js添加事件和移除事件:addEventListener()与removeEventListener()

    Event 对象

    Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。一旦事件发生,便会生成Event对象,如单击一个按钮,浏览器的内存中就产生相应的 event对象。

    • 事件通常与函数结合使用,函数不会在事件发生前被执行!
    • event对象只在事件发生的过程中才有效。
    • event的某些属性只对特定的事件有意义。比如,fromElement 和 toElement 属性只对 onmouseover 和 onmouseout 事件有意义。

    firefox里的event跟IE里的不同,IE里的是全局变量,随时可用;firefox里的要用参数引导才能用,是运行时的临时变量。
    在IE/Opera中是window.event,在Firefox中是event;而事件的对象,在IE中是 window.event.srcElement,在Firefox中是event.target,Opera中两者都可用。

    Event 对象属性和方法

    • clientX,clientY:返回当事件被触发时,鼠标指针相对于浏览器窗口可视文档区域的左上角的的水平x坐标和垂直y坐标;
    • screenX,screenY:返回当某个事件被触发时,鼠标指针相对于显示器左上角的水平x坐标和垂直y坐标;
    • offsetX,offsetY/layerX,layerY:事件发生的时候,鼠标相对于源元素左上角的位置;
    • x,y/pageX,pageY:事件发生的位置的 x 坐标和 y 坐标,它们相对于用CSS动态定位的最内层包容元素;
    • altKey,ctrlKey,metaKey,shiftKey:返回当事件被触发时,”ALT”、”TRL”、”meta”、”SHIFT”键 是否被按下;
    • keyCode:返回keydown和keyup事件发生的时候按键的代码,以及keypress 事件的Unicode字符(firefox2不支持 event.keycode,可以用 event.which替代 );
    • button:返回当onmousedown, onmouseup, 和 onmousemove 事件被触发时,哪个鼠标按钮被点击。对其他事件,不管鼠标状态如何,都返回 0(比如onclick)。整数,1代表左键,2代表右键,4代表中键,如果按下多个键,酒把这些值加起来,所以3就代表左右键同时按下(firefox中 0代表左键,1代表中间键,2代表右键);
      可能的值:
      • 0 没按键
      • 1 按左键
      • 2 按右键
      • 3 按左右键
      • 4 按中间键
      • 5 按左键和中间键
      • 6 按右键和中间键
      • 7 按所有的键
    • type:事件的类型,如onlick中的click;
    • srcElement/target:事件源,就是发生事件的元素;
    • relatedTarget:返回与事件的目标节点相关的节点;
    • fromElement,toElement:对于 mouseover 和 mouseout 事件,fromElement 引用移出鼠标的元素,toElement引用移入鼠标的元素;
    • currentTarget:返回其事件监听器触发该事件的元素;
    • timeStamp:返回事件生成的日期和时间;
    • eventPhase:返回事件传播的当前阶段,1表示捕获阶段,2表示处于目标,3表示冒泡阶段;
    • detail:表示的是与事件相关的细节信息
    • bubbles:返回布尔值,指示事件是否是起泡事件类型;
    • cancelable:返回布尔值,表示是否可以取消事件的默认行为;
    • cancelBubble:一个布尔属性,默认是false。把它设置为true的时候,将阻止事件进一步起泡到包容层次的元素;(e.cancelBubble = true; 相当于 e.stopPropagation();)
    • returnValue:一个布尔属性,设置为false的时候可以阻止浏览器执行默认的事件动作;(e.returnValue = false; 相当于 e.preventDefault();)
    • defaultPrevented:表示是否调用了preventDefault()
    • initEvent(eventType,canBubble,cancelable):初始化新创建的 Event 对象的属性;
    • preventDefault(): 通知浏览器不要执行与事件关联的默认动作;
    • stopPropagation():不再派发事件;
    • attachEvent(eventType, fn),detachEvent()/addEventListener(事件类型, 回调函数, 事件机制),removeEventListener:为制定 DOM对象事件类型注册多个事件处理函数的方法,它们有两个参数,第一个是事件类型,第二个是事件处理函数。事件机制分为冒泡和捕获,如果为false表示事件冒泡,为true表示事件捕获。在attachEvent()事件执行的时候,this关键字指向的是window对象,而不是发生事件的那个元素;

    事件冒泡和事件捕获

    事件流是描述从页面中接收事件的顺序【从内到外(冒泡),从外到内(捕获)】。

    事件冒泡:事件可以沿着包容层次一点点起泡到上层,也就是说,下层的DOM节点定义的事件处理函数,到了上层的节点如果还有和下层相同事件类型的事件处理函数,那么上层的事件处理函数也会执行。例如, div 标签包含了 a ,如果这两个标签都有onclick事件的处理函数,那么执行的情况就是先执行标签 a 的onclick事件处理函数,再执行 div 的事件处理函数。如果希望的事件处理函数执行完毕之后,不希望执行上层的 div 的onclick的事件处理函数了,那么就把cancelBubble设置为true即可。

    事件捕获和事件冒泡刚好相反,它是事件从最不具体的节点(document)先接收到事件,然后再向下逐一捕获至(文档中嵌套层次最深的那个点【当前绑定事件的那个元素】)。

    简单地说,事件冒泡和事件捕获都是一种事件传递的机制。这种机制可以使事件在不同级的元素间传递。事件冒泡是从事件触发的源节点,向父节点传递,直到到达最顶节点。而事件捕获则是从最顶节点,逐步向下传递,直到到达事件触发的源节点。

    DOM事件流如图(剪自javascript高级程序设计):

    由图可知捕获过程要先于冒泡过程

    Event对象的一些兼容性写法

    • 获得event对象兼容性写法
      event || (event = window.event);
    • 获得target兼容型写法
      event.target||event.srcElement
    • 阻止浏览器默认行为兼容性写法
      event.preventDefault ? event.preventDefault() : (event.returnValue = false);
    • 阻止冒泡写法
      event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);

    event事件的传递与冒泡处理示例

    html:

    <div> 
    <table nclick="gotClick(event,'table',this)" id="table"> 
    <tr nclick="gotClick(event,'tr',this)" id="tr"> 
    <td nclick="gotClick(event,'td',this)" id="td"> 
    <input type="button" name="button" value="单击我" 
    onclick="gotClick(event,'按钮',this);" id="button"> 
    </td> 
    </tr> 
    </table> 
    </div> 
    <div id='result'> 
    </div> 

    js:

    function gotClick(event,msg,obj){
    var msgs = msg+" => 被单击了!<br/>";
    var object = event.target||event.srcElement;
    document.getElementById('result').innerHTML +=msgs; 
    // event.cancelBubble=true;//阻止传递
    }

    运行结果是:

    按钮 => 被单击了! 
    td => 被单击了! 
    tr => 被单击了! 
    table => 被单击了!

    事件监听

    addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作。

    它们都接受3个参数:如addEventListener("事件名" , "事件处理函数" , "布尔值");(注:事件名不含”on”,如”click”)

    现在的版本可以省略第三个参数,默认值为false,表示在冒泡阶段调用事件处理程序。如果为true,则表示在捕获阶段调用事件处理程序。

    示例:

    要在body上添加事件处理程序,可以使用下列代码:

    document.body.addEventListener('touchmove', function (event) {  
        event.preventDefault();  
    },false); 

    通过addEventListener()添加的事件处理程序只能使用removeEventListener()来移除;移除时传入的参数与添加处理程序时使用的参数相同。这也意味着通过addEventListener()添加的匿名函数无法移除。

    错误用法示例:

    document.body.addEventListener('touchmove', function (event) {  
        event.preventDefault();  
    },false);  
    document.body.removeEventListener('touchmove', function (event) {  
        event.preventDefault();  
    },false);  

    这个例子中,使用addEventListener()添加一个事件处理程序。虽然调用removeEventListener()是看似使用了相同的参数,但实际上,第二个参数与传入addEventListener()中的那一个完全不同的函数。而传入removeEventListener()中的事件处理程序函数必须与传addEventListener()中的相同

    正确用法示例:

    function bodyScroll(event){  
        event.preventDefault();  
    }  
    document.body.addEventListener('touchmove',bodyScroll,false);  
    document.body.removeEventListener('touchmove',bodyScroll,false);  

    重写后的这个例子在addEventListener()和removeEventListener()中用的是相同的函数。

    共用函数不能带参数,错误用法示例:

    function bodyScroll(event){  
        event.preventDefault();  
    }  
    document.body.addEventListener('touchmove',bodyScroll(),false);  
    document.body.removeEventListener('touchmove',bodyScroll(),false);

    总结:

    1:相同事件绑定和解除,需要使用共用函数;绑定和解除事件时,事件没有”on”,即onclick写成click

    2:共用函数不能带参数;

    展开全文
  • js event loop

    2018-12-12 11:06:00
    首先判断JS是同步还是异步,同步就进入主线程,异步就进入event table 异步任务在event table中注册函数,当满足触发条件后,被推入event queue 同步任务进入主线程后一直执行,直到主线程空闲时,才会去event queue中查看...

    按照这种分类方式:JS的执行机制是

    首先判断JS是同步还是异步,同步就进入主线程,异步就进入event table
    异步任务在event table中注册函数,当满足触发条件后,被推入event queue
    同步任务进入主线程后一直执行,直到主线程空闲时,才会去event queue中查看是否有可执行的异步任务,如果有就推入主线程中
    以上三步循环执行,这就是event loop

    转载于:https://www.cnblogs.com/LTEF/p/10107255.html

    展开全文
  • JS event事件

    千次阅读 2018-09-04 16:13:33
    event对象 当dom tree中某个事件被触发的时候,会自动产生一个用来描述事件所有的相关信息的对象,这个对象就是event(事件对象); 可通过window.event/event来获取。非IE还可以通过函数传参的形式来使用,一般...
  • JS Event Loop 机制看 Vue 中 nextTick 的实现原理」,「阅读原文」查看交流实录 「文末高能」 编辑 | 泰龙 作为一名前端,一直以来以精通 Javascript 为目标。其实说实话精通真的挺难,不是你记住全部的 ...
  • Understanding the node.js event loop 转自:http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ The first basic thesis of node.js is that I/O is expensive:  So the ...
  • Flex or JS Event Flow

    千次阅读 2010-02-10 16:56:00
    Flex EventJS Event一样,都存在一个事件流,这个事件流常常会导致一些啼笑皆非的Bug以及错误; Event Flowl Capturing:事件捕获阶段,如果一个按钮B1放在一个Panel P1容器当中,当我们讲P1注册点击事件EP,将B1...
  • JS event 兼容性写法

    2019-04-10 22:52:04
    var stopObj = { 'stopEvent': function () { //stopPropagation阻止事件传递至下一个节点 if (event.stopPropagation) { //非IE浏览器 event.stopPropagation(); } else { ...
  • 各位大大们,最近在研究js的window对象这一块,对于其中的event对象印象较深,event有一个属性叫做returnValue,当设置为false时,应该是可以取消事件源对象返回数据的,但是 当我利用这一属性去屏蔽按键时发现并...
  • JS event 属性详解

    2017-03-29 10:34:15
    Event属性和方法: 1. type:事件的类型,如onlick中的click; 2. srcElement/target:事件源,就是发生事件的元素; 3. button:声明被按下的鼠标键,整数,1代表左键,2代表右键,4代表中键,如果按下多个键,酒把...
  • js event keyCode 用法

    2015-04-09 11:48:19
    html元素有很多事件,每个事件的当传入参数就是...就可以直接使用event.keyCode 如: document.onkeydown = function(event) {    alert(event.keyCode);   }   document.onclick = function(event) {    a
  • JS event使用方法详解

    2015-06-25 16:32:52
    event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等。 event对象只在事件发生的过程中才有效。event的某些属性只对特定的事件有意义。比如,fromElement 和 toElement 属性只对 ...
  • event . stopPropagation ( ) ; } else { event . cancelBubble = true ; } } //取消节点默认行为 function cancelDefault ( event ) { var event = event ||...
  • 区别是,event.currentTarget( ) 会返回当前触发事件的元素;而event.target( ) 会返回触发事件触发的源头元素。 用法:可以用来监听触发事件的元素是否事件发生的源头元素。这个源头元素指的是,当我点击子元素,...
  • event对象是事件发生时,用来表示事件状态的对象,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。 Event对象的一些兼容性写法 获得event对象兼容性写法  event || (event...
  • 1,使用IE 的 attachEvent 方法注册事件响应程序时,事件处理程序的this值是window。... 2,在非IE浏览器中,事件处理程序中的this等于currentTarget 3,在IE浏览器中,this等于event.srcElement
  • event:事件对象,当一个事件发生的时候,和当前这个对象发生的这个事件有关的一些详细的信息都会被临时保存到一个指定地方-event对象,供我们在需要的时候调用。飞机-黑匣子。 事件对象必须在一个事件调用的函数...
  • js event 兼容问题

    千次阅读 2009-07-25 15:19:00
    function toggleHighlight(evt){ evt... evt : ((window.event) ? window.event : "") // 这行是我新加的,用于获得当前的keycode,为了浏览器兼容要写不少莫名的代码 -_-! keyCode = evt.keyCode ? evt.keyCode : (evt
  • Node.js Event-loop事件循环

    千次阅读 2016-11-02 21:17:12
    node.js事件循环 Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。 Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。 Node.js 基本上所有...
  • JS event用法详解

    千次阅读 2008-04-25 17:04:00
    event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等。event对象只在事件发生的过程中才有效。event的某些属性只对特定的事件有意义。比如,fromElement 和 toElement 属性只对 ...
  • [JavaScript] 5.JS Event机制

    千次阅读 2016-05-16 18:58:38
    Event机制可以使我们编程人员更为方便的控制我们预期业务的实现。事件的状态,决定了我们想要做什么、如何做,Event机制可以做的更好!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,890
精华内容 15,956
关键字:

jsevent