JQuery скрыть динамически сгенерированный элемент, нажав на статический элемент - PullRequest
0 голосов
/ 24 марта 2011

Я искал ответ на этот вопрос, но мне не удалось найти что-то в stackoverflow, которое конкретно решает эту проблему.

По сути, у меня есть некоторые радиоэлементы, которые генерируются динамическипо jQuery (хотя после загрузки страницы - они загружаются, когда текст вводится в поле ввода), и мне нужно проверить эти динамически загруженные радиоэлементы в событии keyup.

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

Обратите внимание, что массив ключей - это простоассоциативный массив ключей с числовыми значениями keyCode.

Таким образом, следующее не работает:

$('#inputField').bind('keyup', function(k) {
  switch (k.keyCode) {
    case keys['up']:
      $('#dynamicallyGeneratedElement').attr('checked', true);
      break;
  }
});

Поскольку динамически сгенерированные радиоэлементы не были готовы к DOM.Есть ли способ решить эту проблему?

Ответы [ 4 ]

1 голос
/ 24 марта 2011

Что заставляет вас говорить следующее?

Поскольку динамически сгенерированные радиоэлементы не были готовы в DOM

Это не должно быть проблемой. Скорее всего, ваше дело никогда не сработает. Вот несколько вещей, которые можно попробовать:

  1. Используйте k.which вместо k.keyCode.
  2. Поместите alert() внутри оператора case вашего обработчика событий, чтобы увидеть, запускается ли он вообще когда-либо. Что-то вроде: alert("event. Found " + $("#dynamicallyGeneratedElement").length + " elements");

Эти две вещи должны помочь вам отладить проблему.

0 голосов
/ 25 марта 2011

Я согласен с Брэндоном, что не должно иметь никакого значения, что ваши радиокнопки не существуют в DOM ready - единственное, что имеет значение, это то, что они существуют, когда ваша функция должна взаимодействовать с ними.

Несколько вещей, которые могут помочь:

  1. Как уже упоминалось, keyCode имеет тенденцию быть немного глючным, в зависимости от того, какой браузер вы используете.Я обычно использую эту проверку:

       if(window.event) // (IE)
       {keynum = k.keyCode;}
       else if(k.which) // (other browsers)
       {keynum = k.which;}
    

    Таким образом, вы можете быть уверены, что независимо от среды ваша переменная назначается правильно.

  2. Любая причинавы используете switch?Если вы тестируете только одно условие, просто используйте простой оператор if.

  3. Используйте метод jQuery inArray(), чтобы проверить, присутствует ли ваша переменная нажатия клавиш в клавишах ['up '] array.

  4. Наконец - не уверен, имеет ли это значение (не думаю, что это имеет значение), но я предпочитаю использовать флажок = проверено, а не проверено ="правда".Я думаю, что это работает так же, но включите его в крайнем случае.

0 голосов
/ 24 марта 2011

Попробуйте делегат jQuery:

$('body').delegate('#inputField', 'keyup', function(k) {
  switch (k.keyCode) {
    case keys['up']:
      $('#dynamicallyGeneratedElement').attr('checked', true);
      break;
  }
});

$('body') - дорогой селектор, попробуйте использовать прямой родительский контейнер элемента #inputField.Дайте мне знать, как это происходит.

0 голосов
/ 24 марта 2011

Когда вы генерируете динамический контент (через append или ajax-вызов), вы можете создать функцию обратного вызова, которая затем выполняет связывание для вас.

Если вам нужна помощь с реальным кодом, вам фактически нужно показать код, который вы используете для динамического добавления контента.

...