转载:触发事件name与javascript函数名同名,form提交问题
<!-- 正文开始 -->
今天遇到一个比较诡异的问题,曾浪费了我好一会时间,现在终于搞定,回头看起来真是屁松的一件事:
-
<form id="myForm">
-
<input type="submit" name="submit" value="commit">
-
<input type="button" name="saveInfo" onclick="save()">
-
</form>
调用的js脚本为:
-
function save(){
-
if (!checkInput()) return;
-
document.myForm.target='_top';
-
document.myForm.action='newUri.do';
-
document.myForm.submit();
-
}
-
-
function checkInput(){
-
return true;
-
}
程序在执行到
document.myForm.submit()的时候总是报对象不支持此属性…………,
baidu一下后发现,原来是<input type="submit" name="submit">所致,修改name="submit"为其他名字后问题解决…………
类似的问题还有:
-
<input type="button" name="exit" value="退出" onclick="exit()">
这种情况下click事件也不能触发,页面上也会报同样的错误(对象不支持此属性),解决方法同上,修改name="exit"或onclick="exit()"为其他名字
http://blog.sina.com.cn/s/blog_53345e4c0100ba3d.html
源代码如下:
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<script type="text/javascript">
function submit(s){
alert(s)
return false;
}
</script>
</head>
<body>
<form action="" onsubmit="return submit(1);">
<div class="row"><label>ID:<input type="text" /></label></div>
<div class="row"><input type="submit" value="查询" /></div>
</form>
</body>
</html>
你可以直接把上面的代码粘贴到html文件里运行。
操作如下:在ID里输入任意字符串,然后单击按钮。
预期效果:弹出一个弹出框,页面不刷新(你刚刚填的字符串还在那才对)。
实际效果:没有弹出框,页面刷新了。就好像不存在submit()这个方法一样。
解决办法:把submit()重命名为submit1()(或其他的什么名字),就能达到预期效果。
请问:What the fuck? 为什么会这样?
——————————————————————————————————————————————————
这里给出贺师俊的解答:
受邀回答。
你的代码里绑定事件处理器的部分是这样写的:
<form onsubmit="return submit(1);">
问题就在于这里。
由于历史原因,在onxxx的属性中直接书写的代码,其context首先是该元素自身(效果上类似于 with (this) { ...你的代码... } )。而form元素自身就有submit()方法。因此你的代码实际调用的是form.submit(),而不是你之前声明的submit函数。
解决方法很简单,改成:
<form onsubmit="return window.submit(1);">
即可。
或者不用onxxx属性,而是直接用脚本绑定:
<script>
document.forms[0].onsubmit = function() { return submit(1) }
</script>
—————————————————————————————
分享到:
相关推荐
javascript 触发事件列表 单击事件___onclick 用户单击鼠标按键时产生的事件.同时onclick指定的事件处理程序或代码将被调用执行. 如:打开页面" onlick="window.open ('xxxx.html','newwindow','width=456,height=...
JavaScript触发事件列表 JavaScript编程重要参考资料
javascript触发事件大讲解
AJAX中不触发javascript事件ajax javascript,ajax,事件
javascript事件触发列表与解说.pdf
[js]javascript事件集合(包有触发事件)终版.pdf
这是关于javascript的触发事件全部,可以拿来查查
自动化控制、事件触发机制研究,动态事件触发,静态事件触发,自适应事件触发,相对静态事件触发。事件(event)是一个非常重要的概念,我们的程序时刻都在触发和接收着各种事件:鼠标点击事件,键盘事件,以及处理...
键盘 keycode的值 javascript时触发事件
主要介绍了javascript触发模拟鼠标点击事件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
鼠标放上去触发一个javascript提示框效果代码鼠标放上去触发一个javascript提示框效果代码鼠标放上去触发一个javascript提示框效果代码鼠标放上去触发一个javascript提示框效果代码鼠标放上去触发一个javascript提示...
在 Web页面中,浏览器可以调用JavaScript 响应用户的操作。例如,当用户单击了某个链接,或者编辑了表单域中的内容,浏览器就...本章介绍基本的事件绑定与事件触发,主要包括事件绑定的常见方式与事件编写两部分内容。
常用javaScript事件归纳。 常用事件: 1.onclick 鼠标单击事件 通常在下列基本对象中产生: button(按钮对象) checkbox(复选框)或(检查列表框) radio (单选钮) reset buttons(重要按钮) submit ...
对事件触发控制进行仿真,并使其最终结果达到稳定
事件触发相关程序,最优控制相关内容,可运行
javascript 动态改变onclick事件触发函数代码,需要的朋友可以参考下。
VB 按下键盘时触发的KeyPress事件
Javascript触发Ajax回传,并且调用客户端事件
javascript页面关闭触发事件 非常实用