如果此脚本禁止提交,为什么还要提交此表单?

时间:2014-12-09 14:43:28

标签: javascript jquery html forms javascript-events

我在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

1 个答案:

答案 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事件,而不是假设它只会通过单击按钮提交。)