2014-04-04 2 views
0
   function checkdates() 
      { 
        var startdate = document.forms["frmHolidayRequest"]["startdate"].value; 
        var enddate = document.forms["frmHolidayRequest"]["enddate"].value; 
        if (Date.parse(startdate) > Date.parse(enddate)) 
         { 
          alert("The End Date can not be before the Start Date") 
          return false; 
         } 

      } 

두 개의 입력 된 날짜를 확인하는 자바 스크립트 기능이 있습니다. 그 중 하나는 휴일 시작 날짜이고 다른 하나는 종료 날짜입니다. 사용자가 시작 날짜 이전의 종료 날짜를 선택하면 경고가 팝업되지만 양식을 제출합니까?자바 스크립트 기능이 중지되지 않습니다. 제출

<form name="frmHolidayRequest" action="HomePage.asp" onsubmit="return InputBoxValidation() || checkdates() || samedates()" method="post"> 
<input type="text" class="datepicker" name="startdate" readonly="true" /> 
<input type="text" class="datepicker" name="enddate" readonly="true" /> 
<input type="submit" name="submitbutton" value="Submit" /> 
</form> 
+4

이것은 onsubmit 핸들러에서 호출되는 것입니까? – Greg

+0

예. onsubmit = "return checkdates()"@Greg – Elwin

+0

조건부가 true를 반환합니까? – Fallenreaper

답변

1

당신은 핸들러를 제출 인라인을 제거하고 결합한다, 사용되어야한다.

checkdates 기능을 정의했습니다.

희망이 도움이 될 것입니다.

1

경고가 양식 제출을 중단하지 않습니다. If 문으로 이동할 때 제출을 중단하려면 다음을 시도하십시오.

function checkdates(e) 
      { 
        var startdate = document.forms["frmHolidayRequest"]["startdate"].value; 
        var enddate = document.forms["frmHolidayRequest"]["enddate"].value; 
        if (Date.parse(startdate) > Date.parse(enddate)) 
         { 

          alert("The End Date can not be before the Start Date") 
          e.preventDefault(); 
          return false; 
         } 

      } 
1

글쎄, 접근 방법이 잘못되었습니다. preventdefault가 필요합니다. 당신의 자바 스크립트 jQuery로

예 :

그리고 원본이 제출 차단합니다 태그의 onsubmit = yourfunction, 기분이야의 jQuery를 제거합니다.

$("[name='frmHolidayRequest']").submit(function(event){ 

    var startdate = $("[name='startdate']").val(); // if you used Name , if u id it's $("#startdate").val(); 
    var enddate = $("[name='enddate']").val(); 
    if (Date.parse(startdate) > Date.parse(enddate)) 
     {   
     event.preventDefault(); 
     alert("The End Date can not be before the Start Date"); 
     } 
    }); 

편집 : 내 이전 코드 ^^ 잘못 그래서 당신은, 내가 양식 이름을 볼 수 없습니다 ID를 이름을 사용하는

0

귀하의 문제는 경고가 스레드의 결과를 차단하고 있다는 것이다 당신의 checkdates()가 시간 초과되었습니다. 경고 상자를 표시하기 전에 기본 동작을 금지해야합니다.

중요 : 경고 전에에서 preventDefault 을 넣어

function checkdates(evt) 
{ 
    var startdate = document.forms["frmHolidayRequest"]["startdate"].value; 
    var enddate = document.forms["frmHolidayRequest"]["enddate"].value; 
    if (Date.parse(startdate) > Date.parse(enddate)) 
    { 
     evt.preventDefault(); 
     alert("The End Date can not be before the Start Date") 
    } 
} 
+0

"시간 초과"가 없습니다. 예, preventDefault가 양식 제출을 중지하지만 preventDefault가 OP 코드의 오류를 숨기고 있습니다. – epascarello

+0

무엇이 ??? 이것은 0을 의미합니다. 차단하면 양식 제출이 중지되므로 false를 반환하면 이벤트 처리기에서 다른 함수 호출이 아닌 경우 중지 할 수 있습니다. 또한 이벤트 객체를 함수에 전달하여 작동하지 않을 수도 있다는 언급이 없습니다. : 혼란스러워 : – Archer

0

문제는 여기이 중 하나에 해당하면 true를 반환 말한다

return InputBoxValidation() || checkdates() || samedates() 

이다. 당신은 jQuery의 CSTE 연구진의 방법을 사용하여 이벤트를 제출하지 OR

onsubmit="return return (InputBoxValidation() && checkdates() && samedates());" 

또는

function validateAll() { 
    var testA = InputBoxValidation(); 
    var testB = checkdates(); 
    var testC = samedates(); 
    return testA && testB && testC; 
} 

onsubmit="return validateAll();" 
+0

그때조차 경고하지 않는가? – Elwin

+0

왜 경고하지 않습니까? 첫 번째 경우'InputBoxValidation'이 true가 아닌 경우 나머지는 실행되지 않습니다. 초는 모두 실행됩니다. – epascarello

관련 문제