Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подмена вызываемой функции - выполняется сразу две функции о.О (https://javascript.ru/forum/misc/71478-podmena-vyzyvaemojj-funkcii-vypolnyaetsya-srazu-dve-funkcii-o-o.html)

Walk 22.11.2017 12:12

Подмена вызываемой функции - выполняется сразу две функции о.О
 
Здравствуйте

Столкнулся со странной работой (браузера? js?), возможно кто-то сталкивался с подобным.

Итак, есть простая страница, на которой есть какая-нибудь кнопка с вызовом js функции, к примеру onclick="function1()"

Я пробую "хакнуть" страницу, подменяя вызываемую функцию руками, в html-редакторе браузера на другую, также существующую в коде: onclick="function2()"

И нажимаю на эту кнопку - в итоге выполняется сразу и function1() и function2().

Как такое может быть?

____________________________________________

P.S. Сами функции никак между собой не связаны, и если я в коде (не через браузер) меняю на onclick="function2()" - то отрабатывает только function2().

P.P.S. Браузер Google Chrome

P.P.P.S. Попробовал сделать тоже самое в FireFox (подменить функцию в html-редакторе браузера) - кнопка вообще перестает работать.

P.P.P.P.S. Если вызывать функцию через консоль - то они вызываются нормально, по одной. Все больше склоняюсь к выводу о том, что такой "двойной вызов функций" является особенностью браузера Chrome

Dilettante_Pro 22.11.2017 12:54

Странно... Меняю в хроме в html-редакторе в test.onclick = foo1; на foo2 - по-прежнему срабатывает foo1, и только
<input id="test" type="text">
<script>
function foo1() { alert(1) }
function foo2() { alert(2) }
test.onclick = foo1;
</script>

Walk 22.11.2017 13:07

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

<html>
<head></head>
<body>
<p onclick="foo1()">123123123</p>
<script>
function foo1() { alert(1) }
function foo2() { alert(2) }
</script>
</body>
</html>

Lion777 22.11.2017 13:08

ну так если написать test.value = "привет" , то тоже ниче не меняет. Не работает значит так обновления в яс

Walk 22.11.2017 13:16

Обновил пост #3

P.S. Изменения вношу через DevTools (которая в хроме вызывается на F12)

Dilettante_Pro 22.11.2017 13:22

<html>
<head></head>
<body>
<p onclick="foo1()">123123123</p>
<script>
function foo1() { alert(1) }
function foo2() { alert(2) }
</script>
</body>
</html>

Да, так 2 функции заработали в хроме.
Значит, js помнит предыдущий обработчик.
в FF работает только вторая функция
в ИЕ - тоже только вторая
в Opera - обе

Lion777 22.11.2017 13:23

так же и у меня, значение value меняется, а функции 2 вызываются, в консоле пишет test.onclick присвоенна только foo1, хоть и прописал foo2 в Elements.

Walk 22.11.2017 13:51

Всем спасибо за комментарии и тесты. Сегодня стал чуть лучше понимать особенности работы браузеров :)


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