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出错时不退出
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning ARKit for iPhone and iPad
Wallace Wang / Apress / 2018-11-5 / USD 39.99
Explore how to use ARKit to create iOS apps and learn the basics of augmented reality while diving into ARKit specific topics. This book reveals how augmented reality allows you to view the screen on ......一起来看看 《Beginning ARKit for iPhone and iPad》 这本书的介绍吧!