JQuery: связать сгенерированные элементы - PullRequest
1 голос
/ 15 января 2011

спасибо, что нашли время посмотреть на это.

Я пытаюсь закодировать мой самый первый плагин jQuery и столкнулся с моей первой проблемой. Плагин называется так

<div id="kneel"></div>
<script type="text/javascript">
$("#kneel").zod(1, { });
</script>

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

Плагин выглядит следующим образом (на всякий случай я включил весь плагин) ...

(function( $ ){
  $.fn.zod = function(id, options ) {  

    var settings = {
      'next_button_text': 'Next',
      'submit_button_text': 'Submit'      
    };

        return this.each(function() {        
            if ( options ) { 
              $.extend( settings, options );
        }

        // variables
        var obj = $(this);

      /* these functions contain html elements that are 
      generated by the get() function below */

        // disable some buttons
           $('div.bario').children('.button').attr('disabled', true);

        // once an option is selected, enable the button
           $('input[type="radio"]').live('click', function(e) { 
          $('div.bario').children('.button').attr('disabled', false);
           })
        // when a button is clicked, return some data
           $('.button').bind('click', function(e) { e.preventDefault();
             $.getJSON('/returnSomeData.php, function(data) {
             $('.text').html('<p>Hello: ' + data + '</p>');
           });

    // generate content, this is the content that needs binding...
    $.get('http://example.com/script.php?id='+id, function(data) {
      $(obj).html(data);
    });

  });

  };
})( jQuery );

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

1 Ответ

4 голосов
/ 15 января 2011

Может оказаться полезным .delegate или .live.Они могут привязывать события к текущим и будущим элементам в документе, а не только к документам, найденным во время вызова.

РЕДАКТИРОВАТЬ

Вот рабочаяпример того, что я имею в виду: http://www.jsfiddle.net/bradchristie/39Gt5/ Обратите внимание, что я больше не обращаюсь к функции делегата, но она добавляет новые абзацы и кнопки при нажатии кнопки, и событие click автоматически связывается.

ОБНОВЛЕНИЕ

Для тех, кто находит этот пост и использует jquery 1.8+, .delegate / .live устарел и заменен на.on.Ссылочная ссылка показывает пример того, как преобразовать ваш код для использования нового метода .on().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...