Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.11.2017, 12:12
Интересующийся
Отправить личное сообщение для Walk Посмотреть профиль Найти все сообщения от Walk
 
Регистрация: 14.08.2017
Сообщений: 28

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

Столкнулся со странной работой (браузера? 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

Последний раз редактировалось Walk, 22.11.2017 в 13:25.
Ответить с цитированием
  #2 (permalink)  
Старый 22.11.2017, 12:54
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

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

Последний раз редактировалось Dilettante_Pro, 22.11.2017 в 12:56.
Ответить с цитированием
  #3 (permalink)  
Старый 22.11.2017, 13:07
Интересующийся
Отправить личное сообщение для Walk Посмотреть профиль Найти все сообщения от Walk
 
Регистрация: 14.08.2017
Сообщений: 28

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

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

Последний раз редактировалось Walk, 22.11.2017 в 13:15.
Ответить с цитированием
  #4 (permalink)  
Старый 22.11.2017, 13:08
Кандидат Javascript-наук
Отправить личное сообщение для Lion777 Посмотреть профиль Найти все сообщения от Lion777
 
Регистрация: 04.11.2017
Сообщений: 117

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

Последний раз редактировалось Lion777, 22.11.2017 в 13:13.
Ответить с цитированием
  #5 (permalink)  
Старый 22.11.2017, 13:16
Интересующийся
Отправить личное сообщение для Walk Посмотреть профиль Найти все сообщения от Walk
 
Регистрация: 14.08.2017
Сообщений: 28

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

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

Последний раз редактировалось Walk, 22.11.2017 в 13:19.
Ответить с цитированием
  #6 (permalink)  
Старый 22.11.2017, 13:22
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

<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 - обе

Последний раз редактировалось Dilettante_Pro, 22.11.2017 в 13:34.
Ответить с цитированием
  #7 (permalink)  
Старый 22.11.2017, 13:23
Кандидат Javascript-наук
Отправить личное сообщение для Lion777 Посмотреть профиль Найти все сообщения от Lion777
 
Регистрация: 04.11.2017
Сообщений: 117

так же и у меня, значение value меняется, а функции 2 вызываются, в консоле пишет test.onclick присвоенна только foo1, хоть и прописал foo2 в Elements.
Ответить с цитированием
  #8 (permalink)  
Старый 22.11.2017, 13:51
Интересующийся
Отправить личное сообщение для Walk Посмотреть профиль Найти все сообщения от Walk
 
Регистрация: 14.08.2017
Сообщений: 28

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение ответа от функции в которой выполняется ajax Kelly Общие вопросы Javascript 7 10.09.2012 16:23