日期:2014-05-16  浏览次数:20320 次

javascript问题求解
在一个页面里面定义了一个FORM,就一个输入框输入名字,一个Submit按钮

<form   action= "/maintain/maintain.do?operation=add "   method= "post "   name= "maintainForm ">
<table>
<tr>
<td>
  <input   type= "text "   name= "corpName "   size= '30 "   maxlength= "60 "   onKeyPress= "return   handleEnter(this,event) ">
</td>
<td>
  <input   type= "button "   name= "submit "   value= "增加 "   onKeyClick= "JavaScript:addSubmit(); ">
</td>
</tr>
</table>
<form>

然后页面中有如下JavaScript:
<script   language= "javascript ">
<!--
    window.document.maintainForm.corpName.focus();
//-->
</script>
<script   language= "javascript ">
function   addSubmit()
{
      var   mess= " ";
      var   val   =   window.document.maintainForm.corpName.value;
      if(   (val.length==0)||(val==null)||(val== " "))
      {
          mess=mess+ "公司名 ";
      }
      if(mess!= " ")
      {
          mess=   "请输入 "   +   mess;
          alert(mess);
          return   false;
      }
      window.document.maintainForm.submit();
}

    function   handleEnter(field,event)
    {
        var   keyCode=   event.keyCode   ?   event.keyCode:event.which   ?   event.which   :   event.charCode;
        if   (keyCode==13)
        {
            addSubmit();
        }
      }
</script>


比Form里面没有放submit属性的按钮,而是放一个普通按钮.当用户点击按钮的时候调用javascript先是判断用户是否输入了名字,没有的话会弹出对话框提示用户输入并在javascript函数addSubmit中返回false不进行表单提交,否则调用window.document.maintainForm.submit();进行表单提交.
同时,如果用户在输入框里面按回车,会调用handleEnter,进一步调用addSubmit进行输入值是否为空.

问题:发现用户在输入为空的情况下按了button或者回车键,对话框确实弹出来进行提示了,可是还是进行submit了!实在是没看出javascript代码有什么问题,还请帮忙看看?


------解决方案--------------------
javascript代码有问题

1、你的button的属性“name”为 "submit ",当调用window.document.maintainForm.submit();的时候,不会调用submit提交。而是把这个解析为你的button按钮。提示没有这个属性错误。
解决方法:把button的name重命名,如submit1

2、你的butonn的中有这样一个event
onKeyClick= "JavaScript:addSubmit(); "
我刚查看了msdn2005,始终没有发现有onkeyclick这个event
我测试的时候,用onclick代替的。


3、就是函数function handleEnter(field,event)并没有返回值。
所以你在文本框中回车的时候,这个函数调用addSubmit()函数检测到text为空,函数addSubmit()返回的false。
但是,这并不是handleEnter(field,event)的返回值。所以还是提交了
解决方法
函数handleEnter(field,event)修改如下
function handleEnter(field,event)
{
var keyCode= event.keyCode ? event.keyCode:event.which ? event.which : event.charCode;
if (keyCode==13)
{
return addSubmit();//这里把addSubmit()的返回值,作为函数返回值就ok了。
}
}

以上3个地方,修改后,在win2003 dc ie6下测试成功。