javascript – 在手动调用事件处理程序时给出某些条件的IE中出错
栏目: JavaScript · 发布时间: 7年前
内容简介:http://stackoverflow.com/questions/4138277/error-in-ie-when-manually-calling-event-handler-given-certain-conditions
前言
>请注意,我不是在寻找代码解决方案,而是深入了解为什么会发生这种情况.
> IE(测试7和8),但不是Firefox,Chrome,Safari的错误.
描述
当手动调用分配给onclick的功能时,如果满足以下所有条件,IE将抛出Error:Object不支持此操作:
>通过元素的[event]属性直接调用该方法.
>你不使用.call()或.apply().
你传递一个参数(任何参数,甚至是未定义的).
>您尝试将返回值分配给变量.
违反这些规则中的任何一个,并且呼叫成功.
该功能本身似乎与之无关.空函数给出相同的结果.
码
var elem = document.getElementById('test'); // simple div element.
var result; // store result returned.
function test_func(){}; // function declaration.
// function expression behaves identically.
elem.onclick = test_func; // assign test_func to element's onclick.
// DIRECT CALL
test_func(); // works
test_func( true ); // works
result = test_func(); // works
result = test_func( true ); // works
// DIRECT CALL, CHANGING THE CONTEXT TO THE ELEMENT
test_func.call( elem ); // works
test_func.call( elem, true ); // works
result = test_func.call( elem ); // works
result = test_func.call( elem, true ); // works ******** (surprising)
// CALL VIA ELEMENT, USING .call() METHOD, CHANGING THE CONTEXT TO THE ELEMENT
elem.onclick.call( elem ); // works
elem.onclick.call( elem, true ); // works
result = elem.onclick.call( elem ); // works
result = elem.onclick.call( elem, true ); // works ******** ( very surprising)
// CALL VIA ELEMENT
elem.onclick(); // works
elem.onclick( true ); // works
result = elem.onclick(); // works
result = elem.onclick( true ); // Error: Object doesn't support this action
概要
再次,我不需要代码解决方案.相反,如果有人深入了解为什么IE以这种方式实现,我很好奇.
非常感谢.
编辑:澄清一件事,实际功能什么都没有任何区别.命名参数,不命名,返回参数,返回一个文字值,返回未定义,所有这些都不起作用.
这可能是因为函数似乎从来没有被实际调用.正如我在下面的评论中指出的,导致此调用的代码运行正常,因此它也不是解析问题.但是当口译人员到达这个时,它会看到:
Variable + AssignmentOperator + DOMElement + EventHandler + CallOperator + Argument
…并抛出错误.没有操纵我似乎有任何区别.任何一个的有效删除,错误消失.
如果我将一个变量添加到存储处理程序的中间,然后从变量工作起来.
var temp = elem.onclick; result = temp( true ); // works
…但这不应该是一个惊喜,因为它是有效地与上面的第四个版本相同.
.
问为什么也是不必要的因为
>你不会经常使用参数调用事件处理程序
>您可以解决问题(正如您在问题中所述)
另外要注意的是,你的比喻太具体了.问题不仅限于赋值表达式,还可以使用其他类型的表达式进行重现:
undefined === elem.onclick( true ) typeof elem.onclick( true ) elem.onclick( true ) - 1 alert(elem.onclick( true ))
http://stackoverflow.com/questions/4138277/error-in-ie-when-manually-calling-event-handler-given-certain-conditions
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【未解决】PySpider中给crawl加fetch_type为js后内部调用phantomjs结果导致大量出错:HTTP 599 Conn...
- 如何避免空指针出错?
- 如何避免特效渲染出错?
- OmniROM:“Flex checkpolicy”出错
- Python安装软件包出错
- 让gulp watch出错时不退出
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机网络(第5版)
Andrew S. Tanenbaum、David J. Wetherall / 严伟、潘爱民 / 清华大学出版社 / 2012-3-1 / 89.50元
本书是国内外使用最广泛、最权威的计算机网络经典教材。全书按照网络协议模型自下而上(物理层、数据链路层、介质访问控制层、网络层、传输层和应用层)有系统地介绍了计算机网络的基本原理,并结合Internet给出了大量的协议实例。在讲述网络各层次内容的同时,还与时俱进地引入了最新的网络技术,包括无线网络、3G蜂窝网络、RFID与传感器网络、内容分发与P2P网络、流媒体传输与IP语音,以及延迟容忍网络等。另......一起来看看 《计算机网络(第5版)》 这本书的介绍吧!