1

HTMLページに日付テキストボックスがあります。dd-mm-yyyy の形式で jQuery を使用して、実行時に検証したいと考えています。無効な形式を入力すると、テキストボックスの背景が赤くなります。

以下を使用していますが、失敗しました。

<script>
jQuery(document).ready(function(){
 jQuery('#submit').click(function () {
  var dateReg = /^\d{2}\-\d{2}\-\d{4}$/;

  if(!dateReg.test(date.val())){
    date.addClass('highlight');
    jQuery(date).focus();
    return false;
  } else date.removeClass('highlight');
}); 
});
</script>

<style>
    .highlight { background: #FFE6E7; }
</style>

<body>
    <form>
    <input type="text" name="date"/> <em>(dd-mm-yyyy)</em><br>
    <input type="submit" value="submit" id="submit"/>
    </form>
</body>

...

私はそれを試しましたが、達成できませんでした:(次に、ユーザーが値を入力するとすぐに検証したいと思います。送信のクリックではありません。

誰でもこれで私を助けてもらえますか?

4

2 に答える 2

0

正規表現は問題ありませんが、jQueryは問題ありません。

jQuery('#date').focus

キーを押すと次のように使用できます。

jQuery('#submit').keypress

または、フォーカスアウトを使用できます。フォーカスが失われるとトリガーされます。

jQuery('#submit').focusout

ただし、必ずバックエンドを確認してください。annyoneはjavascriptを無効にすることができます

于 2013-02-06T13:04:51.630 に答える
0

私は自分で新しいコードを作りました。送信ボタンのOnClickにも取り組んでいますが、強調表示する目的は達成されました。

<!DOCTYPE html>
<html>

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Untitled 1</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>

<script>
$(function() {
    $('#btnSubmit').bind('click', function(){
        var txtVal =  $('#txtDate').val();
        if(isDate(txtVal))
            $('#txtDate').removeClass('highlight');            
        else
            $('#txtDate').addClass('highlight');
    });

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

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

    if (dtArray == null) 
        return false;

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

    if (dtDay < 1 || dtDay > 31) 
        return false;
    else if (dtMonth < 1 || dtMonth> 12) 
        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;
    }
    return true;
}
});
</script>


<style>
.highlight { background-color:#FFE6E7; }
</style>
</head>

<body>
<br/><br/>
Date : <input type="text" id="txtDate" /> (dd/mm/yyyy)
<br/><br/>
<input type="button" value="ValidateDate" id="btnSubmit"/>
</body>

</html>
于 2013-02-06T13:11:48.567 に答える