Подобные функции Jquery не запускают keyup () более одного раза - PullRequest
4 голосов
/ 05 декабря 2010

У меня есть несколько функций Javascript, которые похожи на меня.но ведут себя иначе, чем я хочу.

Я бы хотел, чтобы другой элемент обновлялся с помощью некоторого текста, когда значение входных данных было оценено.Однако для повторного использования кода я хотел бы передать элемент, который будет обновлен, в функцию, но когда я это сделаю, событие keyup() не сработает, когда текст будет введен в поле ввода.

Почемуэто?

Вот тот, который работает, но я должен указать элемент, который будет обновляться явно.

Keyup Working

$(function(){ 
     $("#form1").keyup(function(){
         var val = $(this).val();
         if(val.length < 5){
             $("#inputFeedback").html("Less then 5 chars");
         }else{
             $("#inputFeedback").html("More then 5 Chars!");
     }
});

Вот что я хотел бы сделать, но событие keyup() не будет работать.

Keyup Не работает

var validate = function(feedback){
   var val = $(this).val();
   if(val.length < 5){
       $(feedback).html("Less then 5 chars");
   }else{
       $(feedback).html("More then 5 Chars!");
   }
}


$(function(){
    $("#form1").keyup(validate($("#inputFeedback")));
});

Примечание: Я также пытался в качестве аргументов $(this) и "#inputfeedback" безрезультатно!

Я также пыталсяиспользовать классические функции типа Javascript function foo(bar){ ... }, но это имеет тот же эффект, что и в предыдущем примере.

Я уверен, что это то, что я не делаю правильно или не понимаю, но после нескольких часов поиска иЧтение Я не могу найти ничего, чтобы помочь мне с этим!

Спасибо

Ответы [ 3 ]

1 голос
/ 05 декабря 2010

Вы определенно не можете делать такие обратные вызовы:

http://docs.jquery.com/How_jQuery_Works#Wrong

1 голос
/ 05 декабря 2010
var validate = function(feedback){
  var val = $(this).val();

  if(val.length < 5){
    $(feedback).html("Less then 5 chars");
  }else{
    $(feedback).html("More then 5 Chars!");
  }
}


$(function(){
  $("#form1").keyup(function(){
    validate.call(this, '#inputFeedback');
  });
});

или

var validate = function(feedback){
  return function(){
    var val = $(this).val();

    if(val.length < 5){
      $(feedback).html("Less then 5 chars");
    }else{
      $(feedback).html("More then 5 Chars!");
    }
  }
}


$(function(){
  $("#form1").keyup(validate('#inputFeedback'));
});
0 голосов
/ 05 декабря 2010

Попробуйте написать так:

var feedback=$("#inputFeedback");
$("#form1").keyup(validate(feedback));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...