js中form.submit()提交object is not a function错误解决办法

form.submit()提交时报错object is not a function

在写表单提交时遇到一个很扯淡的问题,分享一下。

比如有个表单,其中某元素的id为submit,像下面这样写:

<input id="submit" type="xxx" />

即,如果在表单某元素中,设置了一个id名为submit的元素, 然后在使用form.submit()进行提交表单时, 表单无动作,浏览器控制台中会提示一个js错误:

Uncaught TypeError: object is not a function

如果使用其它的id就正常了。
分析原因:
因为form.submit其实就是选中了

<input id="submit" ....>

这个对象(object), 所以会提示错误object is not a function。 可以在控制台中打印一下: console.log(form.submit);。

为什么这样呢?

因为form是一个HTMLCollection object, 可以从Interface HTMLDocument了解到。
而HTMLCollection object是a list of nodes(一个元素节点列表), 可以通过indexor(索引)、id 或 元素的name来引用这些节点。

所以,郑晓觉得,造成最初object is not a function的原因,可能是form.submit的这个节点元素对象,把form的submit方法覆盖了。id名和submit方法冲突后,将form.submit认作是操作了id为submit的这个元素。

所以在我们编写代码时,为了确保万无一失,变量和函数命名除了要回避系统和语言明确规定的保留关键字以外,还应该尽量避免使用那些如submit这种HTML以及其他标记中的关键字,否则说不定在什么地方就会有冲突,查找起来也会很麻烦。业界广泛采用的办法就是骆驼式和前缀式,就是在变量名之前加上自己姓名的首拼缩写,如bf_varname,以及使用变量名单词首字母大写等,尤其是在团队开发时,是很有必要的,不仅有助于程序员之间的理解,避免冲突,还可以找到相关的负责人。

时间: 2024-11-15 07:38:07

js中form.submit()提交object is not a function错误解决办法的相关文章

Android 中读取SD卡文件时抛出NullPointerException错误解决办法

Android 中读取SD卡文件时抛出NullPointerException错误解决办法 相关源码: package com.example.musicplayer; import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import

CentOS中Device eth0 does not seem to be present错误解决办法

直接复制了Oracle VM VirtualBox的镜像文件vdi 可以直接创建新的系统镜像真是方便,不过遇到了 Device eth0 does not seem to be present 的问题,在网上找到遇到同样问题的解决方法, 很顺利的解决,记录之: ifconfig-没有看到eth0..然后重启网卡又报下面错误. 故障现象: service network restart Shutting down loopback insterface: [ OK ] Bringing up lo

js执行多个window.onload产生too much recursion错误解决办法

,通用的解决方案如下:  代码如下 复制代码 <script type="text/javascript"> var func = window.onload; window.onload = function(){     func ? func() : 0;     alert(1); } </script> 这样的原理就是把window.onload事件一级一级传递,保证每一个window.onload事件能执行,但如果出现多次调用而且变量名一样,就会产生

js document.form.submit()表单提交实现代码

<script language="网页特效"> function submit2() {   var s=document.getelementbyid("ops教程");   alert(s.value); //显示正确结果,说明函数被执行   document.form.submit(); //没有按常规的submit() 去执行页面,能否有其它submit()方式 } </script> <form name="for

JS和jQuery使用submit方法无法提交表单的原因分析及解决办法_javascript技巧

昨天,在做一个表单异步提交内容的时候,遇到很奇怪的问题,submit()方法无法进行提交,每次提交都是把 当前给刷新了,网络抓包发现,每次都是 get方式去获取 当前页面,完全没有post 请求,想着以前 遇上这样的问题 都是因为 表单中 有 name 或者 id 这些命名跟submit 有冲突,但是检查了几次,始终没有发现 名字冲突,所以这个可能性被排除. 平常自己做触发按钮,基本不用a 标签,但是昨天不知道什么 问题,竟然用了 a 而且还给了 href 为空,由于这个a 的class 有多个

mysql中使用过程中常见错误解决办法收集

1.Mysql errono 1005 : 主外键不是完全一致 , 请检查如下几点:       a.字段是否存在       b.类型是否一致(注意unsigned , powerdesign 生成问题)       c.数据库引擎是否一致       d.字符编码是否一致       e.windows平台下注意修改lower_case_table_names = 0, windows本身不区分文件大小写,改为0之后就区分了可能造成找不到引用的表  2.Mysql errono  121: 

《BI项目笔记》SSAS部署时发生的问题——元数据管理器中存在错误 解决办法

原文:<BI项目笔记>SSAS部署时发生的问题--元数据管理器中存在错误 解决办法 在生成和部署期间出错.是否继续?解决办法: 用Microsoft SQL Server Management Studio 连接Analysis Services 然后删除多维数据库,重新布署.这样就OK的.

jquery-easyui点击添加,弹出个dialog,需要在dialog中的某一个标签设置默认值,请问解决办法~

问题描述 easyui点击添加,弹出个dialog,需要在dialog中的某一个标签设置默认值,请问解决办法~ 如题,请问如何实现.我添加的时候也没有单击一条数据的需求.请问如何实现该功能? 解决方案 给标签设置默认值跟easyui有关系么?你的标签是什么,text?select?a?dorpdown?

Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法_Android

重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码,于是就会用到SurfaceView进行预览,那么问题来了,当切换到对应的Fragment时,屏幕会黑一下,黑了1秒左右就显示出正常的界面,而且这种现象只有第一次进入该Fragment才会出现,之后进入都不会出现,解决方法是无意在github上看到了,试了一下,可以行的通,下面贴出解决方法. 方法一.在Activity的on