触发事件name与javascript函数名同名

转载:触发事件name与javascript函数名同名,form提交问题

<script></script>标签:

it

分类: JavaScript&CSS&Ajax

<!-- 正文开始 -->

今天遇到一个比较诡异的问题,曾浪费了我好一会时间,现在终于搞定,回头看起来真是屁松的一件事:

  1. <form id="myForm">  
  2.      <input  type="submit" name="submit" value="commit">  
  3.      <input type="button"  name="saveInfo" onclick="save()">  
  4. </form>  

调用的js脚本为:

  1. function save(){   
  2.     if (!checkInput()) return;   
  3.     document.myForm.target='_top';   
  4.     document.myForm.action='newUri.do';   
  5.     document.myForm.submit();   
  6. }   
  7.   
  8. function checkInput(){   
  9.    return true;   
  10. }  
程序在执行到 document.myForm.submit()的时候总是报对象不支持此属性…………,
baidu一下后发现,原来是<input type="submit" name="submit">所致,修改name="submit"为其他名字后问题解决…………
 
 
  类似的问题还有:
  1.      <input  type="button" name="exit" value="退出" οnclick="exit()">  

 

   这种情况下click事件也不能触发,页面上也会报同样的错误(对象不支持此属性),解决方法同上,修改name="exit"οnclick="exit()"为其他名字

http://blog.sina.com.cn/s/blog_53345e4c0100ba3d.html

 

 

为什么表单的提交回调函数不能以 "submit" 作为函数名?

源代码如下:

<!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 οnsubmit="return submit(1);"> 
问题就在于这里。 

由于历史原因,在onxxx的属性中直接书写的代码,其context首先是该元素自身(效果上类似于 with (this) { ...你的代码... } )。而form元素自身就有submit()方法。因此你的代码实际调用的是form.submit(),而不是你之前声明的submit函数。 

解决方法很简单,改成: 
<form οnsubmit="return window.submit(1);"> 
即可。 


或者不用onxxx属性,而是直接用脚本绑定: 
<script> 
document.forms[0].onsubmit = function() { return submit(1) } 
</script>

—————————————————————————————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值