on('click') срабатывает не для всего контента
имеем страницу с динамически подгружаемым контентом.
вешаем обработчик $('body').on('click', 'ul.code-lng-list li', function(e) { в итоге обработчик срабатывает только для динамически подгруженного контента, но не срабатывает для уже имеющегося. проверял, контент такого типа действительно имеется на момент вызова. $("ul.code-lng-list li").on("click", function(e) { наоборот (и здесь, как раз, всё логично и в соответствии с описанием функции) из-за чего может возникнуть такое поведение? куда рыть? |
если использовать устаревшую live
$('ul.code-lng-list li').live('click', function(e) { поведение такое же |
итак, что нарыл самостоятельно:
часть такого контента внутри <form> - как раз здесь не срабатывает live(), но срабатываем bind(); часть (динамика) - не в <form>, там срабатывает live(), но логично не срабатывает bind() как обойти? или вешать и через live(), и через bind() ? |
пока сделал через костыль
$('body').on('click', 'ul.code-lng-list li', function(e) { e.preventDefault(); BBCode.fixedLangSel(this); }); $("form ul.code-lng-list li").on("click", function(e) { e.preventDefault(); BBCode.fixedLangSel(this); }); но, может, всё-таки есть нормальное решение? |
Цитата:
Делегированный вызов события, все норм. второй event можно убрать $("form ul.code-lng-list li").on("click", function(e) |
Цитата:
вот что нарыл: http://stackoverflow.com/questions/1...on-inside-form http://stackoverflow.com/questions/1...ide-a-form-tag придётся, видимо костыль оставить |
Цитата:
<script src="http://code.jquery.com/jquery-latest.min.js"></script> <form> <input type="text" /> <input type="password" /> <button class="btn-login">Log in</button> </form> <button class="add">add</button> <script> $(document).ready(function () { document.body.onbeforeunload = function () { return "good bye"; } $('form').on("click", ".btn-login", function () { alert("Button clicked!"); }); $(".add").on("click", function () { $("form").append('<button class="btn-login">Log in</button>'); }); }); </script> |
Цитата:
есть некая страничка, на которой есть некий вид управляющих элементов. часть их подгружается статично при загрузке странички, и распоалагюся в теге <form>, а часть подгружаются динамически и расположены вне <form>, в обычном <div> так вот, обработчик на событие 'click', навешиваемый с помощью live()/on() $('ul.code-lng-list li').live('click', function(e) { $('body').on('click', 'ul.code-lng-list li', function(e) { срабатывает только для элементов, расположенных в <div>, но не срабатывает для элементов, расположенных в <form>. в то же самое время обработчик, навешиваемый с помощью $("ul.code-lng-list li").on("click", function(e) { срабатывает для статичных элементов в <form> (и естественно не срабатывает для динамических) вот и возник вопрос, отчего может появляться такой артефакт в поведении |
в общем, ситуация примерно как описанная в http://stackoverflow.com/questions/1...ide-a-form-tag
при замене <form> на <div> - работает самое поганое то, что в созданном мной тестовом примере - работает и с <form> и с <div> более того, скачал пример из http://stackoverflow.com/questions/1...ide-a-form-tag - он у меня тоже работает и с <form> и с <div> короче, шайтанама какая-то, куда рыть, не знаю, поставил костыль пока |
дико извиняюсь, ложная тревога.
в проблеме разобрался, на пути оказался "лишний" перехватчик в bubble , влияние которого я не учёл всем спасибо за участие |
Часовой пояс GMT +3, время: 13:59. |