Как правильно применить функцию keyup () к другому элементу DOM с разным вводом? - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь ограничить разные минимальные и максимальные значения дня, месяца и года для даты рождения.Однако, кажется, что-то не так с этим в функции.Могу ли я узнать, как правильно и правильно написать эту функцию?Я попробовал функцию стрелки, но она не работает.Должен ли я использовать связывание?Большое вам спасибо!

$(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);
 });
});

Ответы [ 2 ]

4 голосов
/ 15 апреля 2019

Вы должны передать объект 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);
  });
});
3 голосов
/ 15 апреля 2019

забываешь передать объект. Каждый раз, когда вы вызываете функцию внутри функции, функция будет читать только переданные данные, а не переменные или объект сверху. Пример:

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')
}
}

Простое объявление «это» и реконструкция вашей основной функции.

Ваш скрипт ниже с фрагментом

$(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'>
...