찾다

 >  Q&A  >  본문

jQuery 대화 상자 버튼이 무시되었습니다. 계속해서 양식을 제출하세요.

<p>다음과 같은 양식 코드가 있고 자바스크립트 코드는 아래와 같습니다. 문제는 <code>validateDialogForm()</code>을 실행할 때 특정 조건이 충족되면 jquery 대화 상자가 표시된다는 것입니다. 실제로 대화 상자가 몇 초 동안 나타나는 것을 볼 수 있지만 거기에 머물지 않고 양식이 계속 제출됩니다. 양식이 일정 기간 동안 일시 중지되고 사용자가 <코드>저장</code> 버튼을 클릭할 때만 제출되기를 원합니다. 양식이 제출되는 것을 방지하기 위해 <code>validateDialogForm()</code> 함수가 끝나기 전에 <code>return false;</code> 양식 제출은 계속되지 않지만 그대로 유지됩니다. 내가 여기서 뭘 잘못하고 있는 걸까? 아래 코드의 현재 상태는 jquery 대화 상자에 관계없이 양식이 계속 제출된다는 것입니다.(为了清晰起见,删除了很多不同关的代码)</p> <p><br /></p> <pre class="brush:js;toolbar:false;">$('#checklist_dialog').hide(); 함수 verifyDialogForm() { $('#checklist_dialog').show(); var isConfirmed = false; //STEP:1 옵션 B가 선택되었는지 확인합니다. var selectedVal = ""; var selected = $("input[type='radio'][name='sampleChoice']:checked"); if (선택된 길이 > 0) { selectedVal = selected.val(); console.log("선택한 옵션은 " + selectedVal); } if (selectedVal === "choiceB") { if ($("#choiceBstatus").val() === "true") { //대화상자 표시 $('#checklist_dialog').dialog({ 모달: 사실, 최대 너비: 600, 최대 높이: 500, 폭: 600, 높이: 500, 오버레이: { 불투명도: 0.7, 배경: "검은색" }, 버튼: { "저장": 함수() { $(this).dialog('닫기'); Alert("클릭한 SAVE 버튼 내부"); $("#choiceBstatus").val("false"); //isConfirmed = true; 사실을 반환; }, "취소": 함수() { $(this).dialog('닫기'); Alert("양식을 저장하기 전에 체크리스트를 완료/저장해야 합니다!"); // 거짓을 반환합니다; } } }); /* e.preventDefault(); 거짓을 반환; */ } //if($("#choiceBstatus").val() == true ){의 끝 if ($("#choiceBstatus").val() === "false") { // 참을 반환합니다; } } //if(selectedVal === "choiceB")의 끝{ //거짓을 반환; /* if(isConfirmed){ 사실을 반환; } 또 다른 { 거짓을 반환; } */ }</pre> <pre class="brush:html;toolbar:false;"><form id="orderForm" action="/mywebsite/order.htm" method="POST" onsubmit="return (validateOrderForm(this) & ;&validateDialogForm())"> <input id="choiceBstatus" name="choiceBstatus" type="hidden" value="true"> <div id="ownerDisplayFields" style="visibility: visible;"> <table class="noPrint"> //일부 div </tbody> </테이블> </div> <div id="pManualTitle" style="display: block"> <table class="noPrint"> <본문> </tbody> </테이블> </div> <div id="checklist_dialog" title="새 제목" style="display: none;"> <p>체크리스트 1이 여기에 표시됩니다</p> <p>체크리스트 2가 여기에 표시됩니다</p> </div> <table class="noPrint"> <본문> <tr> <td align="center"><br> <input class="button" type="submit" name="save" value="Save"> - <input class="button" type="submit" name="cancel" value="Cancel" onclick="bCancel = true;"> </td> </tr> </tbody> </테이블> <div></div> <p><br /></p>
P粉832212776P粉832212776457일 전503

모든 응답(1)나는 대답할 것이다

  • P粉764836448

    P粉7648364482023-08-16 09:57:47

    댓글에서도 언급했듯이 대화상자는 UI를 차단하지 않기 때문에 대화상자가 표시될 때 양식 제출을 방지해야 합니다. 중지하지 않는 한 계속해서 제출됩니다. 대화 상자에서 버튼을 누른 후 실제로 양식을 제출할 수 있습니다.

    이제 까다로운 점은 실제로 양식을 제출할 때 onsubmit기능이 다시 실행된다는 것입니다! 좋은 방법은 플래그를 설정하는 것입니다. 기본적으로 원하는 작업을 수행하는 아래 의사코드를 참조하세요.

    으아악 으아악

    회신하다
    0
  • 취소회신하다