这对输入和jquery(This)是不一样的

this on input and jquery(this) is not same?

本文关键字:不一样 This 输入 jquery      更新时间:2023-09-26

我希望在Jquery中获得等效的"this"。

如果我关闭datePicker并在InvalidMsg中使用jQuery(this)

我得到这个错误:

 Uncaught TypeError: Cannot read property 'patternMismatch' of undefined

但是如果我保持输入为空,然后提交表单。InvalidMsg工作得很好。

有点晦涩,但是我有这样的输入:

    <input type="text" name="birthday" 
           class="form-control date fulldate hasDatepicker" required="" 
           id="birthday" value=""
           placeholder="birthday" oninvalid="InvalidMsg(this,'Error dude.');"
           oninput="InvalidMsg(this,'error dude.');">

当我提交表单…我有一条自定义消息:"老兄,错误。"

这是触发函数:

    function InvalidMsg(input,txt) {   
       if(input.validity.patternMismatch || input.validity.valueMissing || input.validity.rangeUnderflow || input.validity.rangeOverflow || input.validity.tooLong || input.validity.rangeOverflow){
           input.setCustomValidity(txt);
       }    
       else {
           input.setCustomValidity('');
       }
       return true;
    }

一切正常

现在我在这个输入上有一个日期选择器:

$('#birthday').datepicker({
            onClose: function (dateText, inst) {
                var d = new Date();
                var day1 = $(this).datepicker('getDate').getDate();                 
                var month1 = $(this).datepicker('getDate').getMonth();             
                var year1 = $(this).datepicker('getDate').getFullYear();
                var day2 = d.getDate();
                var month2 = d.getMonth();
                var year2 = d.getFullYear();
                console.log((month1).toString().length + " " + month1 );
                if(month1.toString().length < 2){
                    month1 = "0"+month1.toString();
                }
                if(month2.toString().length < 2){
                    month2 = "0"+month2.toString();
                }
                if(day1.toString().length < 2){
                    day1 = "0"+day1.toString();
                }
                if(day2.toString().length < 2){
                    day2 = "0"+day2.toString();
                }
                var e = year1+""+month1+""+day1;
                var f = year2+""+month2+""+day2;
                if(e>f || e.toString().length == 8)
                    InvalidMsg($(this),"Error Dude");
            }
        });

任何想法?

你有"this"

 InvalidMsg($(this),"Error Dude");
              ^^^^

你正在包装它,所以它是一个jQuery对象,而不是DOM元素。

InvalidMsg(this, "Error Dude");