2017-12-21 3 views
1

JS에서 날짜를 확인하고 날짜를 사용자 입력과 비교하는 함수를 만들었습니다.변경시 이벤트를 한 번만 표시하는 방법은 무엇입니까?

사용자가 입력 필드를 변경할 때 함수가 실행됩니다. 그러나 입력 필드를 변경할 때 날짜가 올바르지 않으면 오류 메시지가 두 번 또는 여러 번 유지되는 문제가 발생합니다. 왜냐하면 함수 계산은 각 변경에서 실행되기 때문입니다.

변경 사항에 오류 메시지가 표시되면 첫 번째 오류 메시지를 비활성화하고 날짜가 맞으면 오류 메시지를 제거한다고 어떻게 말 할 수 있습니까?

function calculate(){ 
    if (thereIsMissingValue()) 
     return 

    let formDate = getFormDate() 
    let comparisonDate = getComparisonDate() 
    let formNewDate = getNewDate() 

    let isOlderThanComparison = formDate < comparisonDate 
    let isNewerThanToday = formDate > formNewDate 

    if(isOlderThanComparison) { 
     $('#next-button').prop('disabled', true); 
     var $newdiv1 = $("<div id='error-form' class='error-form'><p>Error text</p></div>"); 
     $(".gform_page_fields").prepend($newdiv1); 
    }else if(isNewerThanToday) { 
     $('#next-button').prop('disabled', true); 
     var $newdiv2 = $("<div id='error-form' class='error-form'><p>Error text 2</p></div>"); 
     $(".gform_page_fields").prepend($newdiv2); 
    }else { 
     $('#next-button').prop('disabled', false); 
     $("#error-form").remove(); 
    } 
} 


$('#day, #month, #year, #hour, #minute').change(function(){ 
    calculate(); 
}); 

$('#day, #month, #year, #hour, #minute').one("change",function(){ 
    calculate(); 
}); 

을 시도하지만 함수는

+0

당신은 흐림 이벤트를 (요소가 포커스를 잃었을 때 발생)를 사용하여 시도하고 당신의 기대를 충족하는지 확인할 수 있습니다. https://developer.mozilla.org/en-US/docs/Web/Events/blur –

+0

@AndrewLohr 아니요, 각각 잃을 때마다 아무런 표시가 없기 때문에 작동하지 않습니다 – can

+0

일부 HTML을 추가하고 코드를 스 니펫에 넣습니다. [< >]에서 jsfiddle을 선택하면 도움이 될 것입니다. –

답변

4

이 페이지에서 오류 텍스트 사업부를 갖추는 것이 합리적이다,하지만, 숨겨진, 당신은 단지 보여줄 수/한 번만 실행 필요할 때 숨 깁니다. 상태를 변경하는 빈도는 중요하지 않습니다 그런 식으로 -

var $error = $("#error-form"); 

if(isOlderThanComparison) { 
    $('#next-button').prop('disabled', true); 
    $error.html("<p>Error text</p>"); 
    $error.show(); 
} 
else if(isNewerThanToday) { 
    $('#next-button').prop('disabled', true); 
    $error.html("<p>Error text 2</p>"); 
    $error.show(); 
}else { 
    $('#next-button').prop('disabled', false); 
    $error.hide(); 
} 

그냥 같은 페이지에 사업부를 포함해야합니다 ... 만 1 오류가있을 것이며, 항상 관련 (또는 숨겨진)입니다 이 ...

<div id="error-form"></div> 

와 CSS이 추가 ...

#error-form { 
    display: none; 
} 
+0

좋은 점이지만이 방법은 효과가 없습니다. div # error-form을 추가하십시오 – can

+0

정보 더를 제공 할 수 있습니까? 어떤 방법으로 작동하지 않습니까? 변경 이벤트가 계속 올바르게 발생합니까? – Archer

+0

올바른 ID # 오류 양식으로 div를 추가합니다. DIV에 오류 메시지를 추가하지 않습니다. 비활성화는 여전히 작동하지만 오류는 발생하지 않습니다. – can

관련 문제