html-объект для javascript

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

Здравствуйте, у меня возникла проблема с функцией .html в jquery. прослушиватель событий больше не работает каждый раз, когда я удаляю скрипт из кодов и вставляю его снова. можете ли вы помочь мне, как создать реактивный скрипт после его повторной вставки в html.

Комментарии:

1. В частности, «больше не работает» не очень описывает. Точно опишите, что вы ожидаете, и что происходит на самом деле, включая любые сообщения об ошибках. Задавая вопрос о коде, указывайте минимальный образец . Для веб-страниц включайте ссылку на текущую страницу; с другой стороны, лучше всего, чтобы вопросы в SO были автономными. Джон Скит опубликовал другие рекомендации по заданию идеального вопроса . Также ознакомьтесь с часто задаваемыми вопросами SO и немного поищите.

2. спасибо за этот комментарий, чувак. Я изменю свой вопрос к лучшему.

Ответ №1:

Вы можете настроить свои события с помощью .live() метода. Нравится:

 $("#submit_button").live("click",function(e){
});
  

Таким образом, если вы добавляете / удаляете html со своей страницы с помощью .html() метода, события останутся нетронутыми.

Надеюсь, это поможет.

Ответ №2:

Вы могли бы использовать .live() метод для регистрации обработчика события, который сохранит его, даже если соответствующий элемент DOM будет воссоздан. Пример:

 $(function() {
    $('#someid').live('click', function() {
        //
    });
});
  

Ответ №3:

Я предполагаю, что вы изменяете внутренний html-код некоторого контейнера с помощью функции .html () jquery, и назначенные вами события теряются после процесса. Вы можете использовать два подхода:

Если содержимое не изменилось, используйте функцию .detach(), чтобы удалить и вставить свои элементы обратно. Функция .detach() сохраняет обработчики событий, прикрепленные к элементам, которые вы отсоединяете. Однако, если вы вставляете другой контент, используйте событие .live() для назначения ваших событий. События, назначенные с помощью .live(), будут воссозданы заново, когда элемент с тем же селектором будет вставлен в dom.

Комментарии:

1. Я думаю, что это ответ, который я ищу. Я надеюсь, что это сработает.

2. Спасибо за этот отличный ответ, чувак. Да, ситуация такова, что я изменяю содержимое (.html ()) некоторого контейнера, а затем, когда оно вставляется обратно (.html ()), обработчики событий уже потеряны. Я пытался использовать функцию .detach и поместить ее в переменную, но ее нельзя вставить обратно с помощью .html() Как я могу поместить объект .detach в переменную javascript?

3. Разница между .html() и другими методами манипулирования dom в jquery заключается в том, что функция .html() преобразует строку в dom. Таким образом, он не может сохранить ни одно из событий. Вы можете использовать функцию .append(), чтобы вставить элементы обратно в dom.

4. Вы можете использовать функцию добавления следующим образом. Надеюсь, это поможет. var elements = $(«ваши селекторы»).detach(); $(«селектор родительского тега ваших элементов»).append(элементы);

5. Привет, чувак, я уже исправил проблему. Я неправильно понял разницу между .detach и .html. вот что я сделал с .html. var a = $(container).html(); $(container).empty(); $ (container).html(a); в то время как в .detach этого не произойдет, потому что использование .detach приведет к удалению элемента вместо получения его содержимого. Я решаю проблему следующим образом — var a $ (container).contents().detach(); $ (container).html(a); кстати, спасибо за твою помощь, чувак.

Ответ №4:

Используйте это в качестве примера:

 $('a.button').live('click', function(){
  //anchor tag clicked.
  alert('Button has been clicked');
});
  

.live() :

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

Метод .live() способен влиять на элементы, которые еще не были добавлены в DOM, с помощью делегирования событий.

Это означает, что вы добавляете и удаляете html со своей страницы с помощью .html() , и ваши события все равно будут выполняться.

Смотрите веб-сайт jQuery для получения дополнительной информации о .live()

Краткий пример jsFiddle.