![]() |
| 编程社区 » javascript编程 » 100 分 求解一个关于回车的问题 |
100 分 求解一个关于回车的问题 |
rainingheart |
发表:
|
没有人?
沙发自己坐了
form内默认情况下Enter就是对应着form的submit,不管你是post还是get, 所以你在text下面按下Enter直接触发onSubmit, 默认的submit按钮本身按下后就会触发onSubmit,所以在你在这个submit按钮追加了一个onclick以后,会先响应click事件,然后又出发了自己默认的时间。
那为什么有一个<input>时只会会触发一个(automatic submit),
而后来再加一个<input>即两个<input>时会都触发了呢(button submit,automatic submit)?
在<input>中按回车时:
1.
只有一个<input>时
<input type="text" name="text1">
只触发一个(automatic submit)
2.
加一个<input>即
<input type="text" name="text1">
<input type="text" name="text2">
触发了两个(button submit,automatic submit)?
试了半天,问题和LZ描述的一样,没找到原因.
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/form.asp
If the form includes only one text box and the user presses ENTER, the onsubmit event fires. If the form has an INPUT type=submit element, it will appear as a button with a dark border, which indicates the user can press ENTER to submit the form.
如果表单仅包含一个文本框时用户按下回车键,onsubmit 事件将触发。如果表单有 INPUT type=submit 元素,该元素将会变为带有黑色边框,这意味着用户按下回车键即可提交表单。
也就是说,如果form中只有一个文本框,会直接触发onsubmit 事件,而不去执行INPUT type=submit 元素的onclick事件。
我也不理解的说~高手请回答~
有多个文本框时,表单的 INPUT type=submit 元素也带有黑色边框,那不是同样意味着用户按下回车键即可提交表单?为何就执行INPUT type=submit 元素的onclick事件呢?
呵呵,这个问题的确比较怪...
我翻书找找..
呵呵,CSDN的人真热心啊^_^
兄弟还在阿,
我刚才做了测试,具体什么原因,我现在不能给出肯定的答案。
你把你的程序用Firefox浏览器测试,我怀疑是IE对JavaScript支持的方式不一样,Firefox支持JavaScript是正宗的。
多做几个测试,比如:Form里面添加<img .... /> <input type="radio" ... /> 或者 把最后的<input type="submit" ....> 修改成<input type="button" /> 然后测试在不同的内容怎么调用JavaScript
我还在翻书,《JavaScript权威指南》 太厚了,一下子也找不出来正确答案....
<SCRIPT LANGUAGE="JavaScript" event="onkeydown" for="document">
if (event.keyCode == 13){
document.UserLogin.submit();
}
</SCRIPT>
<area shape="circle" coords="23,40,24" href="#" onclick=javascript:document.UserLogin.submit();>
UserLogin为你的form名
楼主可以干脆把
<input type="submit" value="submit" name="sub1" onclick="return onSub();">
去掉
也就是不要提交按钮
然后,当表单内只有一个INPUT文本框时,你按回车,也会执行自动提交事件。
这是因为,只有一个输入控件的情况下,你按回车,毫无疑问就是应该要提交表单了。
但当有一个以上的输入控件时,这个默认就不能成立了,因为其它的输入控件未必是输入有效的状态嘛。
ie的特殊处理,你可以认为是它的bug,估计是为单个input写特例代码的后遗症(或者m$的fans可以认为这是一个feature)。
ff和opera的处理是完全一致的,总是会触发第一个submit按钮或者button按钮(不是input type=button)的onclick,而不管有几个文本框。
最佳实践:不要在submit上写onclick事件,只使用form上的onsubmit。
不对,错了,乱了,哈
实际上,是相当于在只有一个文本框时,SUBMIT按钮无效了,被越过了。当有多个文本框时才正常。
而且
function keypress() {
if(event.keyCode == 13) {
document.getElementsByName("sub1")[0].click();
return false;
}
return true;
}
可以去掉,效果一样
function keypress() 这个函数本来一直就没有用...
如果你想用,应该这样写
<body onLoad="keypress()">
....
以后测试JavaScript最好用Firefox..
IE是为它的Jscript服务的...
刚才一下又乱了。现在又绕回来了。
还是象我刚才所说的:
IE为了满足对一个输入控件进行自动提交,实际上它就采取绕过SUBMIT按钮,直接提交了。
而当输入控件不只一个的时候,就不能应用那套默认机制,而必须通过SUBMIT按钮来进行提交,所以按钮的事件又好使了。
哦,还有,ff在没有submit或button的时候表现与ie是一致的,即仅单个文本框会触发onsubmit,而opera总是会触发。
相对来说,ff的行为最复杂。
1. 有submit或button时,触发submit或button的onclick,然后该onclick的默认行为会触发onsubmit。
2. 没有submit或button时,
2.1 只有一个text框时,触发onsubmit;
2.2 有多个text框时,不触发onsubmit。
opera的行为是第2条简化为(不管几个text框)总是触发onsubmit。
ie最傻呆:
1. 只有一个text框时,(不管有没有submit),直接触发onsubmit
2. 有多个text框时,触发submit上的onclick,其默认行为为触发onsubmit。
显然,我们很容易推理出来:最早ie是没有对单个text框做处理的,后来要加上这个feature,于是以很粗陋的打patch的方式对单个text框做了特殊处理,结果就是如此了。
skendy(那年杀猪亏了) 的说法坚决同意!!微软啊~世界上最霸道的软件公司了
说不定是IE的一个小bug大家争相研究觉得意义不大!!
你们用其它的浏览器试试就知道结果了!
加上onkeypress就解决的问题觉得讨论的意义不大~~
如果大家不同意我的说法,有精力研究就当我没说!
前一阵子也碰到这样的问题了,最后用想办法用js把text的回车提交问题给屏蔽掉了,呵呵
确实很头疼,百思不得其解,看了大家的回复,原来有可能是这么回事
谢了
mark
QDJSADFJLAJSL
页面只有一个text时,ie的一个bug/或是自作聪明的一种处理,
在页面再加一个<input style="display:none">就了事
呵呵,谢谢各位高手了
终于明白了
谢谢各位
| 编程社区 2008 浙ICP备09013498号 |
| © TinyBBS.cn |
| 编程好站连接:codeproject sf.net codeplex |