Jquery datepicker验证mm / dd / yyyy

时间:2013-04-12 19:00:04

标签: jquery validation jquery-ui-datepicker

我正在尝试使用jquery日历datepicker验证输入文本框。 datepicker本身运行良好,但我不确定如何验证输入是mm / dd / yyyy形式。这是以这种方式设置的,因为内容是从另一个jsp加载的。

这是输入。

<table class="style2" width="100%">
    <tr>
        <td width="291" valign="middle">
            <p>Date: <input type="text" class="followup_three_02" id="followup_three_02" maxlength="10" size="10" value="<%=session.getAttribute("followup_three_02")==null?"":session.getAttribute("followup_three_02")%>" />
        </td>
        <td width="246">            
        </td>
    </tr>
</table>  

和datepicker

function showContent(pos,direction){
    $("#area").hide("slide", { direction: direction=="left"?"right":"left"}, 500,      
        function(){
            $("#area").load("3month_forms.jsp #area" + pos, function(){
                $("#area").show("slide", { direction: direction }, 500);
                if(pos==2){
                    $(function(){
                    var pickerOpts = {
                        showOn: "button",
                        buttonImage: "/images/calendar.png",
                        buttonImageOnly: true,
                        changeMonth: true,
                        changeYear: true,
                        yearRange: "-60:+0"
                    }; 
        $("#followup_three_02").datepicker(pickerOpts);
});

                }
            }); 
        }             
    );
}

我的验证器不正确。

}else if(question_pos==2){
        if($('#followup_three_02').val() == ( Date.parse("4/8/2013") > Date.now())){
            alert("What is your baby's birthdate? ");
        return false;

2 个答案:

答案 0 :(得分:1)

这是一个条件:

Date.parse("4/8/2013") > Date.now()

它返回true或false!

val()将始终返回一个字符串,在这种情况下,可能是一个字符串日期,如5/5/2013,并将其与true或false进行比较,始终为false。

if($('#followup_three_02').val() == ( Date.parse("4/8/2013") > Date.now())){
// if  string ^^^^^^^^^         equals       true or false ^^^^^^ == always false

而是尝试:

var given_date   = Date.parse( $('#followup_three_02').val() ),
    compare_date = Date.parse("4/8/2013");

if ( given_date.getTime() > compare_date.getTime() ) { ... }

因为你正在使用jQuery datepicker:

var given_date   = $("#followup_three_02").datepicker('getDate'),
    compare_date = $.datepicker.parseDate('m/d/yy', '04/08/2013', {});

if ( given_date > compare_date ) { ... }

FIDDLE

答案 1 :(得分:0)

调用此功能。如果日期不是mm / dd / yyyy格式,则返回false。

function isDate(txtDate) {
        var currVal = txtDate;
        if (currVal === '') {
            return false;
        }

        //Declare Regex
        var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
        var dtArray = currVal.match(rxDatePattern); // is format OK?
        if (dtArray === null) {
            return false;
        }

        //Checks for mm/dd/yyyy format.
        dtMonth = dtArray[3];
        dtDay = dtArray[1];
        dtYear = dtArray[5];

        if (dtMonth < 1 || dtMonth > 12) {
            return false;
        }
        else if (dtDay < 1 || dtDay > 31) {
            return false;
        }
        else if ((dtMonth == 4 || dtMonth == 6 || dtMonth == 9 || dtMonth == 11) && dtDay == 31) {
            return false;
        }
        else if (dtMonth == 2) {
            var isleap = (dtYear % 4 === 0 && (dtYear % 100 !== 0 || dtYear % 400 === 0));
            if (dtDay > 29 || (dtDay == 29 && !isleap)) {
                return false;
            }
        }
        else {
            return true;
        }
    }