如何将 keyup() 函数正确应用于具有不同输入的不同 DOM 元素?

How to apply keyup() function to different DOM element with different input correctly?

我正在尝试限制出生日期的日、月和年输入的不同最小和最大输入。但是,函数中的 "this" 似乎有问题。我可以知道编写此函数的正确和好的方法是什么吗?我尝试了箭头功能,但它不起作用。我应该使用绑定吗?非常感谢!

$(document).ready(function () {
 var minMonth = 1;
 var maxMonth = 12;
 var minDay=1;
 var maxDay=31;
 var minYear=1900;
 var maxYear=2019;

 function minMaxDob(minDob, maxDob){
        if($(this).val() > maxDob){
            $(this).val(maxDob);
          }
        if($(this).val() < minDob){
            $(this).val(minDob);
          }
      }

 $("#dob_month").keyup(function(){
    minMaxDob(minMonth,maxMonth);
 });
 $("#dob_day").keyup(function(){
    minMaxDob(minDay,maxDay);
 });
 $("#dob_year").keyup(function(){
    minMaxDob(minYear,maxYear);
 });
});

你必须像下面这样将 jQuery 对象传递给 minMaxDob,你必须这样做,因为 "this" 指的是当前正在执行的函数,因为你正在调用辅助函数 "this" 不再引用 DOM 对象,而是引用函数 minMaxDob:

$(document).ready(function () {
  var minMonth = 1;
  var maxMonth = 12;
  var minDay=1;
  var maxDay=31;
  var minYear=1900;
  var maxYear=2019;

  function minMaxDob(jqObj, minDob, maxDob){
    if(jqObj.val() > maxDob){
        jqObj.val(maxDob);
      }
    if(jqObj.val() < minDob){
        jqObj.val(minDob);
      }
  }

  $("#dob_month").keyup(function(){
    minMaxDob($(this),minMonth,maxMonth);
  });
  $("#dob_day").keyup(function(){
    minMaxDob($(this),minDay,maxDay);
  });
  $("#dob_year").keyup(function(){
    minMaxDob($(this),minYear,maxYear);
  });
});

你忘记传递对象了。 每次在函数内部调用函数时,函数将只读取传递的数据,而不是顶部的变量或对象。 示例:

function run(){
x=2;
y=3;
check(x);
//or
check2(x,y);
}
function check(x){
if(x<y){
console.log('in that example you will have a error becouse you are not passing 2nd val')
}
}
function check2(x,y){
if(x<y){
console.log('Yes, x is smaller than Y, we send all necessary data')
}
}

简单的广告 'this' 并重建您的主要功能。

你下面的脚本和片段

$(document).ready(function () {
 var minMonth = 1;
 var maxMonth = 12;
 var minDay=1;
 var maxDay=31;
 var minYear=1900;
 var maxYear=2019;

 function minMaxDob(minDob, maxDob,el){
       if(el.val()> maxDob){
            el.val(maxDob);
          }
        if(el.val() < minDob){
            el.val(minDob);
          }
         
      }


 $("#dob_month").keyup(function(){
    minMaxDob(minMonth,maxMonth,$(this));
 });
 $("#dob_day").keyup(function(){
    minMaxDob(minDay,maxDay,$(this));
 });
 $("#dob_year").keyup(function(){
    minMaxDob(minYear,maxYear,$(this));
 });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id='dob_month' type='text'>