2017-05-03 4 views
0

사용자가 같은 달에 최대 1 일부터 최대 4 일까지 제출하는 그림 입력 양식. 나는 다음과 같이 설정 :JS : 변환 문자열을 사용하여 날짜에 연결 한 다음 모든 메소드를 사용하여 잘못된 입력을 확인하는 방법은 무엇입니까?

// 월 (6)로부터 3 월까지 분노 날짜를 hardcoeding 9

app.controller... 
 
$scope.rangeValidator = { 
 
    startDate: '06/03/2017', 
 
    endDate: '09/03/2017' 
 
    }


//Setting calendar available start and end date. 
 

 
$scope.initCalendar = function() { 
 
    $('#reclamoFecha .input-group.date').datepicker({ 
 
     multidate: true, 
 
     multidateSeparator: ",", 
 
     format: "dd/mm/yyyy", 
 
     startDate: $scope.rangeValidator.startDate, 
 
     endDate: $scope.rangeValidator.endDate, 
 
     language: "es" 
 
     }); 
 
    };


이 범위의 날짜 입력 만 제출되는지 확인하고 싶으면 거짓으로 경고가 실행됩니다. 사용자 datepicker 입력이 String으로 기록 될 때 많은 날짜가 제출 될 때마다 날짜가 기록 된 문자열의 일부가되므로 배열로 분할해야합니다. 20/03/2017이 경고를 트리거 submited된다

// returns: "06/03/2017,07/03/2017,08/03/2017,09/03/2017" 
 

 
$scope.validRangeDate = $rootScope.reclamo.fechas.split(','); 
 

 
$scope.validateForm(function() { 
 
    $scope.validRangeDate = $rootScope.reclamo.fechas.split(','); 
 
    console.log($scope.validRangeDate); 
 

 
//returns: ['06/03/2017','07/03/2017','08/03/2017','09/03/2017',]

그래서 내가 뭘해야 내가 예를 들어 있는지 확인 할 수있는 조건이다.

배열의 "모든"메서드를 사용하여 startdate와 enddate 사이의 범위를 설정하려고 생각했습니다. 문자열을 Date로 변환해야하는지 잘 모르겠습니다. 또한 함수에서 해당 메서드를 사용하는 방법을 잘 모르겠습니다.

$.validator.addClassRules({ 
    myDateFieldRangeValidate: { 
    dateRange: { 
     from: fromDate, 
     to: toDate 
    } 
    } 
}); 
: 유효한 범위에 대한 두 개의 매개 변수를 전달하기 위해

$.validator.addMethod("dateRange", function(value, element, params) { 
    try { 
    var date = new Date(value); 
    if (date >= params.from && date <= params.to) { 
     return true; 
    } 
    } catch (e) {} 
    return false; 
}, 'Date out of range'); 

그런 다음 상대 class rules을 추가

+0

이미 양식이 있습니다. 새 날짜 입력이 범위를 벗어난 경우 유효성을 검사하기 위해 반환 된 배열에 액세스해야합니다. foreach 루프 내에서 Try Catch를 사용하여 각 배열 요소의 조건이 충족되는지 테스트 한 다음 무언가를 실행할 수 있습니까? – Istman

답변

0

처럼 사용자 정의 검증 방법을 만들 수있는 범위의 날짜를 확인하려면

마지막으로 필드/필드에 유효성 검사기를 추가하십시오.

이 완료 예를 들어 다음을 참조하십시오

var fromDate = new Date("2017-03-01"); 
 
var toDate = new Date("2017-03-31"); 
 

 
$.validator.addMethod("dateRange", function(value, element, params) { 
 
    try { 
 
    var date = new Date(value); 
 
    if (date >= params.from && date <= params.to) { 
 
     return true; 
 
    } 
 
    } catch (e) {} 
 
    return false; 
 
}, 'Date out of range'); 
 

 
$.validator.addClassRules({ 
 
    myDateFieldRangeValidate: { 
 
    dateRange: { 
 
     from: fromDate, 
 
     to: toDate 
 
    } 
 
    } 
 
}); 
 

 
$("#myField").addClass("myDateFieldRangeValidate"); 
 
$("#frm1").validate(); 
 
$("#btnValidate").click(function() { 
 
    console.log($("#frm1").valid()) 
 
}); 
 

 
jQuery(function($) { 
 
    var validator = $('#frm1').validate({ 
 
    rules: {}, 
 
    messages: {} 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/additional-methods.min.js"></script> 
 
<form id="frm1"> 
 
    Date 
 
    <input type="text" id="myField" value="16 Feb 2017"> 
 
    <input type="button" id="btnValidate" value="Validate"> 
 
</form>

나는 안녕, 당신이 도움이되기를 바랍니다.

+0

알레 산드로 감사합니다. 당신은 Try Catch를 사용하고 있습니다 ... ondndition이 충족되지 않으면 false를 얻기 위해 응답 배열의 모든 메소드를 사용하지 않는 이유는 무엇입니까? – Istman

+0

예, 당신은 정확히 무엇을해야하는지 이해할 수 없습니다 ... 어쨌든 배열에서이 검사를 대신 할 수 있습니다 : if (date> = params.from && date <= params .to)' – Alessandro