为什么我必须在调用OnSubmit时返回我的函数返回?

时间:2011-12-08 04:54:10

标签: javascript javascript-events

我有这个JSP,寻找最后一行主要问题的主要部分。

 <script type="text/javascript">
   function validate() {
       if( $('#title_post').val() == "" || $('#content_post').val() == "" ){
            alert('Por favor preencha todos os campos da mensagem.');
            return false;
       }
       else
           return true;
   }
 </script>
<script>
    $(document).ready(function(){
        $("#xdef").tagcloud({colormin:"d88",colormax:"0a0",height:300});    
    });
    function seta_type(obj){
        document.getElementById('topicType').value = obj;       
    }
</script>
<div id="wrapper">
        <div id="col-left">
        <c:url value="/${company}/produto/${product}/topico/addtopic.html" var="linkPost"/>     
    <form:form action="${linkPost}" modelAttribute="topic" 
method="post" onsubmit="return validate();">

最后一行有return validate()如果我保持这种方式,如果字段没有填写,我的表单会给我一个警告,好吧这就是我想要的。

我的问题是我试图从中删除返回,如果我这样做,我会收到提醒,但是当我按下确定时,servlet会继续执行常规操作,而不是停留在同一页面...

为什么?

BTW我是Javascript的新手,请详细解释。

3 个答案:

答案 0 :(得分:4)

当您从函数return false validate()时,false值实际上并未传递给事件处理程序。您需要return函数的结果直接到onsubmit属性。这也是建议在JavaScript代码中附加事件处理程序的好时机。

把它想象成这样......

form.addEventListener('submit', function() {
    validate();
}, false);

validate()的调用是否会通过魔法将其false传递给事件处理程序? Nope!

答案 1 :(得分:1)

为了让表单提交取消,您需要从onsubmit处理程序返回false。通过删除return语句,可以删除该行为。

onsubmit="return validate();"

这实际上返回验证的结果

删除return语句

onsubmit="validate();"

只需调用验证,但不会返回其结果。

onsubmit处理程序本身必须返回false才能取消表单提交

答案 2 :(得分:0)

当验证失败时,您必须将false返回到表单元素以取消表单提交请求。如果您返回true表单,它将继续表单提交请求。