raj*_*raj 5 html javascript events
我在这里看到了我朋友的代码......
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> Check action </TITLE>
<script>
function detectEvent(){
if(window.event.keyCode==13)
{
alert("you hit return!");
}
}
</script>
</HEAD>
<BODY>
<form name="name1" onkeyup="detectEvent()" action="page2.html">
<p> Field1
<input type="text" id="text1"/>
</p>
</form>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
当他尝试在文本框中输入一个值并按下回车时,它没有调用detectEvent().我说,它总是会在输入按钮上调用onSubmit .....他让我感到惊讶,
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> Check action </TITLE>
<script>
function detectEvent(){
if(window.event.keyCode==13)
{
alert("you hit return!");
}
}
</script>
</HEAD>
<BODY>
<form name="name1" onkeyup="detectEvent()" action="page2.html">
<p> Field1
<input type="text" id="text1"/>
</p>
<p> Field1
<input type="text" id="text2"/>
</p>
</form>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
现在按回车,该功能被调用.....为什么这样!?
为什么onKeyUp没有在只有一个字段的表单上调用.!!! 我错过了什么吗?
事件的顺序是:
keydown
keypress
submit
keyup
Run Code Online (Sandbox Code Playgroud)
因此,当您的keyup处理程序被调用时,表单已经开始提交.如果action表单是page2.html本地文件系统上的表单,那么它将非常快速地导航并且可能在keyup被调用之前离开页面; action另一方面,设置为外部站点,并keyup有时间触发.
添加第二个输入字段是一个不同的问题:在这种情况下,表单根本不会提交.这是一个奇怪的历史怪癖,浏览器将提交一个只有一个输入而没有提交按钮的表单,但拒绝提交一个包含多个输入的表单,并且没有提交按钮.这可以追溯到HTML 2.0规范:
如果表单中只有一个单行文本输入字段,则用户代理应接受该字段中的Enter作为提交表单的请求.
HTML 2.0没有指定是否应该接受Enter以在任何其他情况下提交表单(目的似乎只是复制古代<isindex>元素的功能),但当时的浏览器似乎已将其解释为意味着输入提交不应该发生在有多个字段的地方,但是任何提交按钮都会导致输入提交无论如何都要发生.IE和其他后来的浏览器复制了这种奇怪的行为
无关紧要的一点:依赖于window.event使代码不必要地仅IE浏览器.对于所有其他浏览器,事件对象作为参数传递给事件处理函数.您可以onkeyup="detectEvent(event)"在HTML中执行,然后在detectEvent函数中使用该参数,该函数适用于两个模型,因为使用了本地参数event或全局参数window.event.但通常的方法是丢失事件处理程序属性并从JavaScript分配:
<form action="page2.html" id="enterform">
<p> Field1
<input type="text" id="text1">
<!-- Note: *no* trailing slash - the doctype says HTML4, not XHTML -->
</p>
</form>
<script type="text/javascript">
document.getElementById('enterform').onkeyup= function(event) {
if (event===undefined) event= window.event; // for IE
if (event.keyCode===13)
alert('You pressed Enter');
};
</script>
Run Code Online (Sandbox Code Playgroud)
说了这么多......我一般都怀疑捕获Enter键.我不太确定你要做什么,但如果这是改变表单中默认按钮的常见情况,这肯定不是这样做的方法,并会导致各种各样的问题.没有充分的理由你应该捕获Enter键来调用.submit()表单.