Слетает обработчик после AJAX
Доброго времени суток!
В теле HTML страницы есть такая конструкция <div id="ajax_response"> ... <span id="myid">bla-bla</span> ... </div> В скрипте на тег <span> повешен обработчик (function() { document.getElementById("myid").style.display = "none"; })(); После того, как AJAX обновит весь <div>, обработчик со <span> слетает. Подскажите пожалуйста, как правильно в этой ситуации повесить обработчик? Спасибо |
S.E.K.T.O.R.,
Ну дык при удалении элемента нет события привязанного к нему и свойств стиля привязанных к данному элементу DOM. Новозагруженные элементы(с теми же селекторами) не имеют отношения к объекту старых установок Проще менять добавлять класс элементу с селектором и прописать скрытие в стиле ============== Для переемственности текущего состояния нун перед загрузкой считывать в массив старые установки и возвращать на подгруженные идентичные элементы, или грузить избирательно лишь обновляемое содержимое ============== Мон вешать событийную обработку на элемент через атрибуты (onclick и т.д.) |
Цитата:
Цитата:
|
S.E.K.T.O.R.,
используйте делегирование |
Цитата:
|
S.E.K.T.O.R.,
document.body.onclick = function(e) { if (e.target.id === "myid") { e.target.style.display = "none"; } };Смотря что тебе надо, ты ведь не удосужился нормальный код привести в пример. Привел какие-то огрызки, в которых ничего не понять. |
Цитата:
Есть на странице <span>. Нужно через JS сделать ему style.display = "none" при загрузке страницы и что бы этот style не слетал после AJAX, так как сам нужный <span> находится внутри контейнера, который обновляется AJAX'ом. В вашем примере, стиль присваиватся при клике на <span>, мне же нужно то же самое, но при загрузке страницы. |
S.E.K.T.O.R.,
:) Поставить скрипт сразу после контейнера на странице, Вызвать програмный клик. А почему просто не поставить строку document.getElementById("myid").style.display = "none"; ? |
Цитата:
Опять жа без выложенного минимального кода - это обсуждения в "курилке" |
S.E.K.T.O.R.,
еще раз говорю, мы не ясновидящие... приведи часть кода который у тебя не работает, а гадать что и как у тебя там сделано никто не будет. |
devote
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Title Here</title> </head> <body> <table width="100%" cellspacing="0" cellpadding="0" align="center"> <tr> <td> <div id="AjaxResponse"> Bla-Bla <span id="myid"> <input type="text" name="input1"> </span> <input type="button" name="button1" value="Send" onclick="SendAjax()"> </div> <script type="text/javascript"> <!-- (function() { document.getElementById("myid").style.display = "none"; })(); function SendAjax() { document.getElementById("AjaxResponse").innerHTML = 'Bla-Bla <span id="myid"><input type="text" name="input1"></span><input type="button" name="button1" value="Send" onclick="SendAjax()">'; return false; } // --> </script> </td> </tr> </table> </body> </html> Упрощенно, но смысл тот же. После того, как данные полученные аяксом обновят все, что внутри дива, спан становится видимым, а нужно что бы оставался display = "none". В скрипт аякса я не могу вмешиваться, это часть движка. |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Title Here</title> <style> #AjaxResponse.span-hide #myid { display: none; } </style> </head> <body> <table width="100%" cellspacing="0" cellpadding="0" align="center"> <tr> <td> <div id="AjaxResponse"> Bla-Bla <span id="myid"> <input type="text" name="input1"> </span> <input type="button" name="button1" value="Send" onclick="SendAjax()"> </div> <script type="text/javascript"> (function() { document.getElementById("AjaxResponse").className = "span-hide"; })(); function SendAjax() { document.getElementById("AjaxResponse").innerHTML = 'Bla-Bla2 <span id="myid"><input type="text" name="input1"></span><input type="button" name="button1" value="Send" onclick="SendAjax()">'; return false; } </script> </td> </tr> </table> </body> </html> |
devote, огромное спасибо, то, что нужно :thanks:
|
Часовой пояс GMT +3, время: 20:39. |