我有这个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的新手,请详细解释。
答案 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表单,它将继续表单提交请求。