Поле формы мониторинга jQuery, созданное по запросу AJAX - PullRequest
2 голосов
/ 21 апреля 2010

Предисловие: я уверен, что это невероятно просто, но я искал этот сайт и сайт jQuery и не могу найти правильный поисковый запрос, чтобы получить ответ - извините за мое невежество!

Я добавляю дополнительные поля формы, используя функцию jjuery ajax, и мне нужно затем применить дополнительные функции ajax к этим полям, но не могу заставить jQuery отслеживать их в полях формы fly.

Как мне заставить jQuery использовать эти новые поля?

$(document).ready(function() {
   $('#formField').hide();
   $('.lnk').click(function() {
      var t = this.id;
      $('#formField').show(400);
      $('#form').load('loader.php?val=' + t);
   });

      //This works fine if the field is already present
      var name  = $('#name');
      var email = $('#email');
      $('#uid').keyup(function () {
         var t = this; 
         if (this.value != this.lastValue) {
            if (this.timer) clearTimeout(this.timer);             
            this.timer = setTimeout(function () {
               $.ajax({
                  url: 'loader.php',
                  data: 'action=getUser&uid=' + t.value,         
                  type: 'get',
                  success: function (j) {
                     va = j.split("|");
                     displayname  = va[1];
                     mail         = va[2];
                     name.val(displayname);
                     email.val(mail);
                  }
               });
            }, 200);  
            this.lastValue = this.value;
         }
      });
}); 

Таким образом, если функция присутствует на основной html-странице, функция работает, но если она поступает с помощью функции $ .load, она этого не делает - предположительно, потому что $ (document) .ready уже запущена.

Я попробовал:

$(document).ready(function() {
   $('#formField').hide();
   $('.lnk').click(function() {
      var t = this.id;
      $('#formField').show(400);
      $('#form').load('loader.php?val=' + t);
      prepUid();
   });
});

function prepUid(){
      var name  = $('#name');
      var email = $('#email');
     $('#uid').keyup(function () {
snip...........

Но, похоже, это не сработало ...

Ответы [ 2 ]

2 голосов
/ 21 апреля 2010

Что вам нужно, так это функция jquery live.

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

Вы можете сделать что-то вроде этого:

$('.clickme').live('click', function() {// Live handler called.});

, а затем добавить что-нибудь, используя DOM

$('body').append('<div class="clickme">Another target</div>');

Когда вы щелкаете по div, добавленному выше, он запускает обработчик кликов, как вы ожидаете со статически загруженными dom-узлами.

Вы можете прочитать больше здесь: http://api.jquery.com/live/

2 голосов
/ 21 апреля 2010

Я думаю, что вы близко. Вам нужно добавить свой обработчик keyup после завершения вызова .load. Попробуйте изменить это ...

  $('#form').load('loader.php?val=' + t);
  prepUid();

К этому ...

  $('#form').load('loader.php?val=' + t, null, prepUid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...