我在JavaScript开发方面绝对是新手,我遇到了以下问题。
我有一个包含2个输入标记的表单,用户可以使用日历脚本可视化和提交按钮插入2个日期(类似 dateFrom 和 dateTo )的 CERCA )。
当用户点击提交按钮时,会执行一个JavaScript,检查2个日期是否正确(如果两个日期都已设置,并且 dateTo 是否稍后 dateFrom < /强>)。如果2个日期正确,则表单将被同化为Java Servlet,否则不会提交。
所以这是我的表单( dataDa 表示 dateFrom , dataA 表示 dateTo ):
<form id="dataDaAForm" name="dataDaAForm" action="salwf.do?serv=<%=request.getSession(false).getAttribute("service")%>&matricola=<%=request.getSession(false).getAttribute("matricola")%>" method="post">
<div class="customPanel" style="width: 100% !important; overflow-y: auto;">
<div class="pane">
<table class="dataDaATable" width="100%">
<tr>
<!-- DATA DA: -->
<td align="right">
Da:
</td>
<td>
<input type="hidden" size="9" class="impPrfTot" readonly="readonly"
onchange="cambioDataDa(this.value)"
name="dataDa" id="datada" value=""
style="font-size: 11px;color: #000000;">
<input id="datada2" onchange="" type="text" maxlength="9" size="9"
class="impPrfTot"
readonly="readonly" style="width: 100px" value="<%=request.getSession(false).getAttribute("dataDa")%>"
style="font-size: 11px;color: #000000;">
<img style="cursor:pointer;margin-left: 3px;"
src="js/calendar/cal.gif"
alt="Seleziona data" border="0"
onClick="displayCalendar(document.getElementById('datada'),'yyyymmdd',this)">
</td>
<!-- DATA A: -->
<td align="right">
A:
</td>
<td>
<input type="hidden" size="9" class="impPrfTot" readonly="readonly"
onchange="cambioDataA(this.value)"
name="dataA" id="dataa" value=""
style="font-size: 11px;color: #000000;">
<input id="dataa2" onchange="" type="text" maxlength="9" size="9"
class="impPrfTot" value="<%=request.getSession(false).getAttribute("dataA")%>"
readonly="readonly" style="width: 100px"
style="font-size: 11px;color: #000000;">
<img style="cursor:pointer;margin-left: 3px;"
src="js/calendar/cal.gif"
alt="Seleziona data" border="0"
onClick="displayCalendar(document.getElementById('dataa'),'yyyymmdd',this)">
</td>
<!-- SUBMIT BUTTON: -->
<td>
<button class="dataDadataAButton" name="submitdataDadataA" onclick="testSubmit();">Cerca</button>
</td>
</tr>
</table>
</div>
</div>
</form>
这是检查2个日期是否正确的脚本:
function testSubmit() {
//f = document.forms[0];
var f = document.getElementById('dataDaAForm');
//var dataConfermaDA = f.dataDa.value;
//var dataConfermaA = f.dataA.value;
var dataDa = f.dataDa.value;
var dataA = f.dataA.value;
// TODO:
if (!controllaDate(dataDa, dataA, "'Data Conferma'")) {
return false;
}
//f.action = "edimon.do?serv=M.5";
f.submit();
}
function controllaDate(DataDA, DataA, nomeCampo) {
var check_DataDA = (DataDA != "");
var check_DataA = (DataA != "");
var check_data_DA = check_DataDA;
var check_data_A = check_DataA;
if (!check_data_DA && (check_DataA)) {
alert(nomeCampo + " Selezionare correttamente Data Da");
return false;
}
if (!check_data_A && (check_DataDA)) {
alert(nomeCampo + " Selezionare correttamente Data A");
return false;
}
if (check_data_DA && check_data_A) {
/**
var giorno = DataDA.substr(6, 7);
var mese = DataDA.substr(4, 5);
var anno = DataDA.substr(0, 4);
var dataDa = new Date(anno, mese - 1, giorno);
var giorno = DataA.substr(6, 7);
var mese = DataA.substr(4, 5);
var anno = DataA.substr(0, 4);
*/
var giorno = DataDA.substring(6, 8);
var mese = DataDA.substring(4, 6);
var anno = DataDA.substring(0, 4);
var dataDa = new Date(anno, mese - 1, giorno);
var giorno = DataA.substring(6, 8);
var mese = DataA.substring(4, 6);
var anno = DataA.substring(0, 4);
var dataA = new Date(anno, mese - 1, giorno);
if (dataA < dataDa) {
alert(nomeCampo + " La Data Da deve essere minore o uguale alla Data A");
return false;
}
}
return true;
}
因此,例如,如果我尝试仅插入 dataDa (dateFrom)值而不是 dataA (dateTo)值,那么当我单击时 Cerca 按钮 testSubmit()执行JavaScript。
现在在这个脚本中我有这样的东西:
dataDa = "20141202"
dataA = ""
(设置了dataDa,dataA为空)
现在它被称为执行生效日期检查的 controllaDate()脚本。
所以这个脚本重现了这样的东西(接收到的输入参数):
controllaDate("20141202", "", "'DataConferma'")
请执行此代码段:
if(!check_data_A&amp;&amp;(check_DataDA)){ 警报(nomeCampo +“Selezionare correttamente Data A”); 返回false; }
并输入此if(因为 check_data_A 为false,因为未设置 dataA )。
因此,向其调用者 testSubmit()函数显示警告弹出窗口和返回false 。
所以,正如我所料,现在回到 testSubmit():
if (!controllaDate(dataDa, dataA, "'Data Conferma'")) {
return false;
}
并且 testSubmit()函数返回 false ,并且不应提交我的表单,因为此操作未执行:
f.submit()
但是如果没有执行 f.submit()语句,我也不知道为什么还要提交表单。为什么?我错过了什么?
我可以在某种程度上阻止表单在返回false时提交吗?
TNX
答案 0 :(得分:2)
<button class="dataDadataAButton" name="submitdataDadataA" onclick="testSubmit();">Cerca</button>
您有一个提交按钮。单击它将提交表单,除非有什么阻止它。
onclick
函数调用testSubmit
(返回false
),但它对testSubmit
的返回值没有任何作用。您必须从false
函数返回onclick
,以防止发生提交按钮的正常操作。
onclick="return testSubmit();"
那就是说,onclick
属性是我们在90年代将JavaScript绑定到事件处理程序的方式。我们现在有addEventListener
(我们可以绑定到表单的submit
事件,而不是假设它只会通过单击按钮提交。)