【问题标题】:Uncaught TypeError: Illegal invocation in Chrome or SCRIPT65535: Invalid calling object in IE when submit form未捕获的类型错误:Chrome 或 SCRIPT65535 中的非法调用:提交表单时 IE 中的调用对象无效
【发布时间】:2014-03-17 17:49:24
【问题描述】:

我收到 Uncaught TypeError: Illegal invocation in Chrome 或 SCRIPT65535: Invalid calling object in IE when submit form.

以下标记重现错误:

<!DOCTYPE html>
<html>
<body>

<p>Enter some text in the fields below, then press the "Submit form" button to submit the form.</p>

<form id="myForm" action="form_action.asp">
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br><br>
<input type="button" onclick="myFunction()" value="Submit form">
</form>

<script>
function myFunction()
{
var submit2 = myForm.submit;
submit2();
}
</script>

</body>
</html>

但是当改为行时:

var submit2 = myForm.submit;
submit2();

直接提交表单 myForm.submit() 然后一切正常。

所以如何解决问题对我来说很清楚,对我来说很有趣为什么“间接”表单提交会导致错误

【问题讨论】:

  • 你仍然在调用myForm.submit,但没有()

标签: javascript forms internet-explorer google-chrome


【解决方案1】:

myForm.submit()调用的submit方法知道上下文是myForm,但是当我们用submit2()调用它时,没有上下文(全局上下文),所以报错。

要修复错误,您必须通过将 this 的内容设置为 myForm 来调用 submit2() 方法。

示例代码是

var submit2 = myForm.submit;
submit2.call(myForm);

您可以使用调用或申请更改上下文。

更多信息请致电和申请:

  1. apply mdn reference
  2. call mdn reference

【讨论】:

  • 奇怪的是它在IE9-10中运行良好但在IE11中却没有,这种错误只出现在IE11和Chrome中。当它最有可能出现上下文问题时,也应该在 IE9-10 中重现
猜你喜欢
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 2019-04-29
  • 2017-06-16
  • 1970-01-01
相关资源
最近更新 更多