【发布时间】:2018-11-28 12:48:56
【问题描述】:
以下是我从 html 源码中获取的代码 sn-p:
<FORM id=SubmitLogon method=post name=submitLogonForm action=/MyLogin/SubmitLogon.do;jsessionid=reQYQqPCZt_6Oc3EkU66XFiC-fWQQ2DHPdCgWYwR5TbT9xsXOsPe!907086402 AutoComplete="off">
<TR>
<TD class=logonLabelTdTag>Username </TD>
<TD align=left>
<DIV id=wwgrp_username_Id class=wwgrp>
<DIV id=wwctrl_username_Id class=wwctrl>
<INPUT onchange="javascript: this.value=this.value.toUpperCase();" tabIndex=1 onfocus="javascript: this.value=this.value.toUpperCase();" id=username_Id class=logonTextBox maxLength=40 name=username>
</DIV>
</DIV>
</TD>
</TR>
<TR>
<SCRIPT language=JavaScript1.2 type=text/javascript>
$(document).ready(function () {
try {
$("input[type='text']").each(function(){
$(this).attr("autocomplete","off");
});
}
catch (e)
{ }
});
</SCRIPT>
<TD class=logonLabelTdTag>Password </TD>
<TD align=left>
<DIV id=wwgrp_password_Id class=wwgrp>
<DIV id=wwctrl_password_Id class=wwctrl>
<INPUT tabIndex=2 id=password_Id class=logonTextBox maxLength=40 type=password value="" name=password>
</DIV>
</DIV>
</TD>
</TR>
<TR>
<TD colSpan=2 align=right>
<BUTTON onclick=validateLoginCredentials() style="BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; HEIGHT: 39px; WIDTH: 98px; BACKGROUND: none transparent scroll repeat 0% 0%; BORDER-BOTTOM-STYLE: none; BORDER-RIGHT-STYLE: none" type=submit value="Loginn">
<IMG src="https://den02qoj.us.oracle.com/images/btn_login.jpg">
</BUTTON>
</TD>
</TR>
</FORM>
<script>
function validateLoginCredentials(){
alert('invoked');
var usernameVar = document.getElementById("username_Id").value;
var passwordVar = document.getElementById("password_Id").value;
//validationIdd_user
//validationIdd_password
alert('usernameVar is:'+usernameVar);
alert('passwordVar is:'+passwordVar);
alert('usernameVar length is:- '+usernameVar.length);
alert('passwordVar length is:- '+passwordVar.length);
document.getElementById("validationIdd").style.visibility = 'hidden';
document.getElementById("validationIdd_user").style.visibility = 'hidden';
document.getElementById("validationIdd_password").style.visibility = 'hidden';
if(usernameVar == '' && passwordVar == ''){
document.getElementById("validationIdd").style.display='';
alert('517-false');
return false;
}else if(usernameVar == '' || usernameVar == null){
document.getElementById("validationIdd").style.visibility = 'hidden';
document.getElementById("validationIdd_password").style.visibility = 'hidden';
document.getElementById("validationIdd_user").style.display='';
alert('523-false');
return false;
}else if(passwordVar == '' || passwordVar == null){
document.getElementById("validationIdd_password").style.display='';
alert('527-false');
return false;
}else{
alert('530-true submitting now----------------');
document.getElementById('SubmitLogon').submit()
return true;
}
alert('validateLoginCredentials:end');
}
</script>
第一次点击提交按钮
当username(id:username_Id) 和password(id:password_Id) 都为空时,JS 函数validateLoginCredentials() 它返回false,我通过alert('517-false'); 验证但表单已提交。
当我第二次点击提交按钮时username(id:username_Id) 和 password(id:password_Id) 都是空的,JS 函数 validateLoginCredentials() 被调用但它没有进入下面的块(这是我上面描述的第一个场景)。
if(usernameVar == '' && passwordVar == ''){
document.getElementById("validationIdd").style.display='';
alert('517-false');
return false;
}
为什么相同(以上)场景会有不同的结果 以及为什么在第一种情况下即使 JS 函数返回 false 也提交了表单?
请帮帮我。
【问题讨论】:
-
您在点击
onclick="return validateLoginCredentials()"中没有return,您可能也应该在表单上使用onsubmit ...... -
@epascarello onclick="return validateLoginCredentials()" 没有解决问题仍然提交表单并且我没有在表单上使用 onsubmit,如果我使用它,js 函数将被调用两次正确的。?我最近得到了这方面的知识
标签: javascript forms dom-events form-submit buttonclick