Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery函数无法正确防止输入字母_Javascript_Jquery - Fatal编程技术网

Javascript Jquery函数无法正确防止输入字母

Javascript Jquery函数无法正确防止输入字母,javascript,jquery,Javascript,Jquery,我有一个名为dateField的类,我将它分配给带日期的输入。它应该防止字母被插入,如果用户试图输入字母,它应该阻止操作。如果触发了e.preventdeault(),则它会进入“如果”,但实际上它不会停止操作 $(document).off('keyup', '.dateField'); $(document).on('keyup', '.dateField', function(e){ $(this).attr('maxlength', '10'); if ($.inArr

我有一个名为
dateField
的类,我将它分配给带日期的输入。它应该防止字母被插入,如果用户试图输入字母,它应该阻止操作。如果触发了
e.preventdeault()
,则它会进入“如果”,但实际上它不会停止操作

$(document).off('keyup', '.dateField');
$(document).on('keyup', '.dateField', function(e){
    $(this).attr('maxlength', '10');

    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
         // Allow: Ctrl+A, Command+A
        (e.keyCode === 65 && (e.ctrlKey === true || e.metaKey === true)) ||
         // Allow: home, end, left, right, down, up
        (e.keyCode >= 35 && e.keyCode <= 40)) {
             // let it happen, don't do anything
             return;
    }
    // Ensure that it is a number and stop the keypress
    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
        e.preventDefault();
    }

    var value=$(this).val();

    if(value.length==2||value.length==5){
        $(this).val($(this).val()+'/');
    }

    if (value.length > 9) {
        var comp = $(this).val().split("/");
        var m = parseInt(comp[0], 10);
        var d = parseInt(comp[1], 10);
        var y = parseInt(comp[2], 10);

        var date = new Date(y,m-1,d);

        if (date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d) {
          $(this).removeClass('fail');
        } else {
          $(this).addClass('fail');
        }
    }

    if(e.keyCode == 13 || e.which == 13){
        e.preventDefault();

        if($(this).hasClass('tcal')){
            var date = $(this).val().split("/");
            var m = parseInt(date[0], 10),
            d = parseInt(date[1], 10),
            y = parseInt(date[2], 10);

            if(new Date(y, m - 1, d)!='Invalid Date'){
                //alert( new Date(y, m - 1, d));
                $('.date-manage').mouseleave();
                $('.date.sub-title').html($('#date-between').val()+' to '+$('#date-and').val());

                //$(".box-date input").unbind("blur");
            }
        }

        $('.date-animation').stop();
        $('.date-animation').animate({height: 0}, 500, 'easeOutQuart');
    }
});
$(document.off('keyup','.dateField');
$(文档).on('keyup','.dateField',函数(e){
$(this.attr('maxlength','10');
如果($.inArray(例如,keyCode[46,8,9,27,13,110,190])!=-1||
//允许:Ctrl+A、Command+A
(e.keyCode==65&&(e.ctrlKey==true | | e.metaKey==true))||
//允许:起始、结束、左、右、下、上

(e.keyCode>=35&&e.keyCode你有没有尝试过像keydown这样的其他事件?可能keydown太晚了,字符已经被插入到输入中。

@MalteHartwig继续回答这个问题!我甚至没有想到这个lol。你为什么不简单地使用日期选择器呢?@Ishettyl它在视觉上不吸引人:)