Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Обновление js кода (https://javascript.ru/forum/dom-window/52512-obnovlenie-js-koda.html)

Gertasreg 22.12.2014 18:24

Обновление js кода
 
Суть проблемы
есть код
<div id="scri">
    <script charset='utf-8' src='/jquery-2.1.1.min.js' type='text/javascript'></script>
</div>

<script>
    $(document).ready(function() {
        $("#block").html('<div class="add">Добавить</div><div id="ty">Алерт</div>');
        $(".add").click(function(){
            var ds = "<script charset='utf-8' src='/jquery-2.1.1.min.js' type='text/javascript'><\/script>" +
                     "<script charset='utf-8' src='/my.js' type='text/javascript'><\/script>";
            $("#scri").html(ds);
        });
    });
</script>

<div id="block">
    
</div>

и код файла my.js
$(document).ready(function() {
    $("#ty").click(function(){
        alert(333);
    });
});

Когда кликаю на класс "add" $(".add"), в блоке $("#scri") заменяется html содержимое "подключаю 2 скрипта" после я кликаю на блок с id="ty" $("#ty") вылетает алерт все как бы идет как надо но стоит мне повторно кликнуть на $(".add") после чего опять на $("#ty") уже 2 алетра вылетает еще раз повторить предыдущие действия уже 3 алерта
Оно же вроде как заменяет html, но суда по том что алертов с каждым кликом больше, оно помнит и старых html который был в блоке
объясните пожалуйста из за чего оно так работает?

Deff 22.12.2014 19:12

Gertasreg,
Есть bind и unbind http://jquery-docs.ru/Events/
Ибо click не отключаемый обработчик
Для элементов не присутствующих пока на странице, но могущих быть в будущем лучше ставить единственный обработчик live

Gertasreg 22.12.2014 19:28

Deff,
этот код я написал исключительно для примера
Я не как не могу понять почему если обновлять/заменять html в блоке продолжает работать код который был ранее
Когда я обновляю html $("#scri").html(ds);
Оно работает типа там много одинаковых js файлов
<div id="scri">
    <script charset='utf-8' src='/jquery-2.1.1.min.js' type='text/javascript'></script>
    <script charset='utf-8' src='/my.js' type='text/javascript'></script>
    <script charset='utf-8' src='/jquery-2.1.1.min.js' type='text/javascript'></script>
    <script charset='utf-8' src='/my.js' type='text/javascript'></script>
    <script charset='utf-8' src='/jquery-2.1.1.min.js' type='text/javascript'></script>
    <script charset='utf-8' src='/my.js' type='text/javascript'></script>
</div>

bes 22.12.2014 21:51

Цитата:

Сообщение от Deff
Для элементов не присутствующих пока на странице, но могущих быть в будущем лучше ставить единственный обработчик live

Deff, когда это было :)
http://api.jquery.com/live/
Цитата:

version deprecated: 1.7, removed: 1.9

http://api.jquery.com/on/

Deff 22.12.2014 22:17

bes,
Упс показалось 1.2.1 (До второй не доплыл ибо моём стоит старьё

Gertasreg 22.12.2014 22:51

Если уже нет live то как быть то?
Это че теперь bind и unbind ко всем элементам применять?
А что если у меня к многим клик используется?

bes 22.12.2014 23:36

Цитата:

Сообщение от Gertasreg
Если уже нет live то как быть то?
Это че теперь bind и unbind ко всем элементам применять?
А что если у меня к многим клик используется?

read more
Цитата:

Сообщение от bes


Gertasreg 22.12.2014 23:48

bes,
В моем случае работает так же как и обычный клик
Мне только помогает unbind сношу все клики и заново вешаю
Както тупо но работает

Deff 23.12.2014 21:02

Gertasreg,
Там нужно указывать ближайший родительский неизменяемый элемент за всё время, с которого делегируются события
http://jquery.page2page.ru/index.php5/On
Читать про делегирование


Часовой пояс GMT +3, время: 16:29.