表单校验javascript代码:
 function MessageCheck(){
var MessageCheck = false;
var Title = document.MessageAdd.Title.value;
if (Title == "") {
alert("您是否忘记输入留言主题?");
document.MessageAdd.Title.focus();
return false;
}
         return true;
 }
响应ctrl+enter事件代码:
 function MessageAddPressKey(eventobject)
 {
if(event.ctrlKey&&window.event.keyCode==13)
{
if(MessageCheck())  document.all.Submit.click();
}
 }
调用部分:
<body onKeyDown="MessageAddPressKey()">
<form name="MessageAdd" method="POST" onSubmit="return MessageCheck()" action="Add_Message.jsp">
测试时,不填表单数据,点击“提交”按钮会弹出警告“您是否忘记输入留言主题?”,但是直接按ctrl+enter提交表单时,会弹出两次警告“您是否忘记输入留言主题?”。
请问怎么解决?

解决方案 »

  1.   

    改成
    <script>document.onkeydown=MessageAddPressKey;</script>
    就没有问题
    不知道原先的body onkeydown为何会这样,通常都是用document.onkeydown
    只测试出第二次的警告是因为form被提交的缘故,
    至于如何引发就得请教高手了
    能力有限^_^
      

  2.   

    不好意思
    漏了一句:
    if(event.ctrlKey&&window.event.keyCode==13)
    {
    if(MessageCheck())  document.all.Submit.click();
    return false;//忘记加了^_^
    }
      

  3.   

    当按ctrl+enter的时候,MessageAddPressKey()执行,里面有一个MessageCheck()
    这是一次,然后form的onSubmit="return MessageCheck()"执行,这是第二次!
      

  4.   

    把这个判断if(MessageCheck())删掉吧
      

  5.   

    “这是一次,然后form的onSubmit="return MessageCheck()"执行,这是第二次!”
    为什么会引起onsubmit
    我也试过,如果没有添加onkeydown,就不会发生
    不知是否知道其根本原因?:(
      

  6.   

    表单的OnSubmit是提交前触发的事件
    function MessageAddPressKey(eventobject)
     {
    if(event.ctrlKey&&window.event.keyCode==13)
    {
       document.all.Submit.click();
    }
     }这样就 可以了,不用显示校验表单
      

  7.   

    把这个判断if(MessageCheck())删掉也不行,只留 document.all.Submit.click();照样会弹出两次,这些我都试过了。不知道什么原因。
      

  8.   

    以前有没有谁用jsp做过这个,这些细节性的东西简直折磨人。
      

  9.   

    Submit按钮是怎么写的,有onclick=""吗?
      

  10.   

    我没有在Submit按钮里面加东西啊,
    好像只要一用到了onKeyDown就会弹出两次警告提示。
      

  11.   

    这里有个群 27837846 欢迎大家加入。
    欢迎大家交流javaweb开发经验,你的发言是对大家共同的鼓励!
      

  12.   

    原程序运行过程:
    onkeydown触发->MessageAddPressKey()->MessageCheck()->alert
    ->Title.focus()->原先onkeydown的回车键效果->form提交
    ->form.onsubmit->MessageCheck()->alert->Title.focus()->return false->提交失败至于为何有“原先onkeydown的回车键效果”,这个本质我也不知道
    可以试试改成: ctrl + a (keyCode:65),Title里面就会输入a
    好像是ctrl键效果没有了解决办法:
    1:document.onkeydown里面加return false可以取消“原先onkeydown的回车键效果”
      body onkeydown对于这个不起作用
    2:MessageAddPressKey()不要调用MessageCheck(),就是说不要有Title.focus()
      可以另外写函数
    总之完善一下document.onkeydown就行了请各位大哥验收,如果不足请多提意见^_^
      

  13.   

    非常感谢fosjos的参与!
    不太清楚你说的触发机制对不对,但是不加Title.focus()时照样弹出两次,不写在body里面也没有效果。
    也许你提到的换个键这个办法可能可行。
    不过ctrl+enter键对用户来说比较方便,也习惯了。
      

  14.   

    我刚才试了一下用<body onKeyUp="MessageAddPressKey()">
    这个方法可行的,如果表单为空的话只弹出一次警告,达到了预期的效果。
    问题得到解决了,但还是不知道用onKeyDown为什么会触发两次警告?
    谢谢大家的参与!
    有一个java web方面的群,欢迎朋友们进来交流经验。您的发言是对大家共同的鼓励和帮助!
      

  15.   

    因为你的name=title 输入控件是type=text
    在这里面回车的意思就是提交
    所以当你按 Ctrl+Enter的时候执行了2次提交
    所以会出现2次提示.
    如果把输入控件改为textarea
    或把提交快界键改了,可能就可以了。 比如改为Alt+S