Вопрос по jquery-ui, mutation-events, jquery, dom-events, dom-manipulation – ну, как правильно указал ThiefMaster, вы не сможете сделать это с делегатом или вживую. Теоретически вы можете реализовать такую ​​функциональность, которую хотите, но, если серьезно, в этом просто нет необходимости. В этом случае идеальное решение - просто использовать .button () для вновь созданного элемента.

2

я есть веб-сайт с jQuery и jQuery UI. У меня есть функция Javascript:

function ToButton()
{
$(".ToButton").button();
}

Эта функция запускается после загрузки страницы и изменения всех элементов с классом «ToButton».

Также я меняю HTML-код, когда пользователь нажимает кнопку. Например.:

$("body").append('<span class="ToButton">Test Button</span>');

И я хочу запустить функцию ToButton для этого нового элемента, но методы live или делегата в jQuery не имеют типа события «show» или «create». Поэтому мне нужно вызвать функцию ToButton () после всех изменений HTML-кода.

Можете ли вы помочь мне, как я могу делегировать функцию ToButton всем элементам?

Ваш Ответ

4   ответа
2

ты и живые события только для событий, которые пузыри.

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

2

1)Используйте события мутации или наблюдателей

Первый метод легко найти, вы можете найти больше о событиях мутации DOM Level 3 здесь:http://help.dottoro.com/ljmcxjla.php - и новые наблюдатели мутаций DOM Level 4 здесь:https://developer.mozilla.org/en-US/docs/DOM/MutationObserver

В то время как события мутации DOM уровня 3 широко поддерживаются в настоящее время, они являются устаревшим API, который может снизить производительность в определенных браузерах. # 2 ниже использует метод, который работает во всех браузерах, которые поддерживают CSS-анимацию, и это не снижает производительность.

2)Используйте метод события CSS Keyframe Animation, который я разработал, чтобы обнаружить вставки узла DOM

Вы можете использовать фиктивное событие анимации ключевого кадра, чтобы всплыть уведомление о событии вставки всякий раз, когда узел анализируется внутренними механизмами стилевого оформления CSS браузера. Я написал очень подробный пост по этому вопросу здесь:http://www.backalleycoder.com/2012/04/25/i-want-a-damnodeinserted/

0

function AddButton (parent, buttonElement) {
    $(buttonElement).addClass('.ToButton').appendTo($(parent)).button();
}

Используйте как

AddButton('body', '<span>Test Button</span>');

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

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

0

хм, не уверен, правильно ли я понял, но разве это не работает?

$("body").append( $('<span class="ToButton">Test Button</span>').button() )

просто для вашего удобства:http://www.bennadel.com/blog/1751-jQuery-Live-Method-And-Event-Bubbling.htm

ну, как правильно указал ThiefMaster, вы не сможете сделать это с делегатом или вживую. Теоретически вы можете реализовать такую ​​функциональность, которую хотите, но, если серьезно, в этом просто нет необходимости. В этом случае идеальное решение - просто использовать .button () для вновь созданного элемента. Vlad Khomich
Здравствуйте! Спасибо за ответ. Я думаю, что ваш код может работать, но мне не нужно использовать функцию button () или ToButton () несколько раз. Я хочу «делегировать» эту функцию один раз и больше не использовать ее на странице. Leonid

Похожие вопросы