I have developed some logic to display relevant errors when the form is submitted, but it continues to allow me to submit the form without displaying the errors. I used a flag to determine whether the form should be submitted, but it seems to be ignored, it’s just not working.
if (this.formId == "challengeQuestionAuth") { return new Promise(function (resolve, reject) { debugOut("Question: " + _this.payload.question, "alert"); let div = document.createElement('div'); div.innerHTML = ` <div id="contentWrapper" style="display: block;"> <div class="page"> <div class="page-body"> <div> <div class="page-title">Online Banking Security Challenge</div> <div class="main-section"> <div class="page-instructions"> This action requires you to answer a security question before it can be completed. </div> <form class="form" method="post" name="security_challenge" id="security_challenge"> <input type="hidden" /> <div class="validation-summary-valid alert alert-error" data-valmsg-summary="true"> <span> Please correct the highlighted field(s) below. </span> <ul> <li style="display: none;"></li> </ul> </div> <div class="content-panel"> <fieldset> <input name="Text" id="Text" type="hidden" value="What is your best friend's middle name?" /> <input name="" id="" type="hidden" value="" /> <div class="challenge-question"> <label for="challengeResponse"> ${_this.payload.question} </label> </div> <div class="challenge-answer"> <input aria-required="true" name="challengeResponse" class="control" id="challengeResponse" autofocus="autoFocus" type="password" autocomplete="off"> <span class="error"><p id="answer_error"></p></span> <input class="checkbox" id="ShowAnswer" type="checkbox"> <label class="label" for="ShowAnswer">Show answer</label> <span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="Answer"></span> </div> <div class="action-group-bottom"> <a id="cancelButton" class="cancel-button contextual-link" href="">Cancel</a> <input name="Action:SecurityQuestion" id="continueButton" class="primary-action orange-button" type="submit" data-clear-alerts="true" value="Submit" /> </div> </fieldset> </div> </form> </div> <div aria-required="true" name="challengeQuestion" type="text" id="challengeQuestion">${_this.payload.question}</div><br /> <label class="control-label" for="challengeResponse">Response:</label> </div> </div> </div> </div>`; uiContainer.appendChild(div); document.getElementById("security_challenge").onsubmit = function() { const answer = document.forms["security_challenge"]["challengeResponse"].value; const submit = true; if (answer == null || answer == "") { answerError = "Please provide an answer."; document.getElementById("answer_error").innerHTML = answerError; submit = false; } return submit; }
Here is a minimally reproducible example:
https://codepen.io/ldco2017/pen/dyMMpjb?editors=0010
Advertisement
Answer
I was able to disallow the form to be submitted with what I have below. Adding strict comparison operator to if
statement and change const submit
to let submit
because you are reassigning it.
let submit = true; if (answer === null || answer === "") { answerError = "Please provide an answer."; document.getElementById("answer_error").innerHTML = answerError; submit = false; }