Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 21.10.2018
Сообщений: 4

Почему не работает такое определение обработчика событий?

22.10.2018, 23:26. Показов 1694. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему не работает такая связка?

HTML5
1
<button id="btn1">КНОПКА1</button><br>
JavaScript
1
btn1.onclick = alert ("ВСПЛЫВАЮЩЕЕ ОКНО");
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.10.2018, 23:26
Ответы с готовыми решениями:

Почему массовое определение свойств объекта window работает, а для иных объектов такое не выходит, не работает?
можно записать: = ; и у объекта window появятся два новых определённых (имеющих значения) свойства: window.a = 1 и window.b = 2 если же...

Отделение работы обработчика событий клавиатуры от событий ввода текста в поля редактирования
Проблема: есть форма с графическими компонентами, в которых редактируется текст. И вот проблема - обработчик событий клавиатуры...

Задачи на использование событий. Осуществить использование событий в программе с применением синтаксиса обработчика, рекомендованного для среды NET Fr
NET Framework. Программа для поиска простых чисел среди чисел Фибоначчи. При нахождении очередного простого числа активировать событие...

11
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
23.10.2018, 08:44
Лучший ответ Сообщение было отмечено malkovan как решение

Решение

Потому что надо назначать функцию
JavaScript
1
btn1.onclick = function () { alert("ВСПЛЫВАЮЩЕЕ ОКНО"); }
а у вас сразу сработает alert() и обработчиком будет возвращаемое этой функцией значение, в данном случае undefined
1
0 / 0 / 0
Регистрация: 21.10.2018
Сообщений: 4
23.10.2018, 12:12  [ТС]
А скажите пожалуйста, какой код будет правильнее и почему?

HTML5
1
<button id="btn">КНОПКА</button>
CSS
1
btn.onclick = function () { alert("ВСПЛЫВАЮЩЕЕ ОКНО")};
или этот

HTML5
1
<button onclick="btn()">КНОПКА</button>
CSS
1
function btn() {alert ("ВСПЛЫВАЮЩЕЕ ОКНО")};
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
23.10.2018, 12:25
malkovan, вот этот
HTML5
1
<button id='button'>КНОПКА</button>
JavaScript
1
2
3
document.getElementById('button').addEventListener('click', function() {
  alert("ВСПЛЫВАЮЩЕЕ ОКНО");
})
Потому что в этом случае, на кнопку можно будет без проблем повесить хоть 20 событий. А в Вашем только одно.
Вы присваиваете функцию свойству объекта, запишите еще раз и последнее затрет предыдущее.

Не по теме:

j2FunOnly, приветствую

0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.10.2018, 00:13
malkovan,
Цитата Сообщение от malkovan Посмотреть сообщение
HTML5
1
<button onclick="btn()">КНОПКА</button>
конфликтует с нативными модулями ES2015. Так что видимо недолго осталось жить этой форме записи...
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,094
24.10.2018, 10:36
Цитата Сообщение от amr-now Посмотреть сообщение
конфликтует с нативными модулями ES2015.
Где про это почитать можно? Такая запись вроде стара как мир?
Цитата Сообщение от amr-now Посмотреть сообщение
Так что видимо недолго осталось жить этой форме записи...
Вряд ли, ведь до сих пор typeof null === 'object'; возвращает true
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.10.2018, 10:46
Цитата Сообщение от AlexZaw Посмотреть сообщение
Где про это почитать можно?
Проверить можно.
----
Пользуюсь удобной функцией
JavaScript
1
2
3
4
5
6
7
8
9
10
11
/**
 * Имя типа у аргумента. Обычно с прописной буквы, кроме undefined и null.
 * Для примитивных типов подставляется имя типа-обертки.
 * @param {*} arg Произвольное значение объекта или примитивного типа, для которого нужно определить имя типа.
 */
function getType(arg) {
    let proto, constr;
    return (arg === undefined) ? "undefined" :
        (arg === null) ? "null" :
            (!(proto = Object.getPrototypeOf(arg)) || !(constr = proto.constructor)) ? "Object" : constr.name;
}
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,094
24.10.2018, 11:03
Цитата Сообщение от amr-now Посмотреть сообщение
Проверить можно.
Можно подробнее? Мой уровень знаний, пока, не позволяет понять что происходит в этой функции, и как это соотносится с вышеприведенной формой записи.
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
24.10.2018, 15:46
AlexZaw,
Цитата Сообщение от AlexZaw Посмотреть сообщение
Где про это почитать можно?
нигде, потому что это чушь.
При чтении разметки, парсер встречая запись
HTML5
1
onclick="btn()"
, передает инструкции интерпретатору, который в свою очередь инициализирует свойство .onclick у сущности объявлением той функции, что указана в атрибуте.
Что равносильно записи
JavaScript
1
btn.onclick = function () { alert("ВСПЛЫВАЮЩЕЕ ОКНО")};
Функция, представленная amr-now, вернет лишь строковое представление интерфейса сущности. Это ну никак не коррелирует с
Цитата Сообщение от amr-now Посмотреть сообщение
конфликтует с нативными модулями ES2015.
и уж точно не имеет отношения к вопросу ТС.
1
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.10.2018, 17:52
Цитата Сообщение от malkovan Посмотреть сообщение
HTML5
1
<button onclick="btn()">КНОПКА</button>
Конфликтует с нативными модулями ES2015.

Протестируем два случая.
1) скрипт c типом module находится в файле html
Не работает:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <button onclick="btn()">КНОПКА</button>
    <script type="module">
        function btn() { alert("ВСПЛЫВАЮЩЕЕ ОКНО") };
    </script> 
</body>
</html>
Code
1
2
JavaScript2338684.htm:7 Uncaught ReferenceError: btn is not defined
    at HTMLButtonElement.onclick
Работает:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <button id="b1">КНОПКА</button>
 
    <script type="module">
        let b1 = document.getElementById("b1");
        b1 = document.addEventListener("click", btn);
 
        function btn() { alert("ВСПЛЫВАЮЩЕЕ ОКНО") };
    </script> 
</body>
</html>
2) скрипт с функцией находится в отдельном файле JavaScript2338684.js.
JavaScript
1
2
export default
    function btn() { alert("ВСПЛЫВАЮЩЕЕ ОКНО") };
Не работает:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <button onclick="btn()">КНОПКА</button>
    <script type="module" src="./JavaScript2338684.js"></script>
    <script type="module">
        import btn from "./JavaScript2338684.js";
    </script>
</body>
</html>
Работает:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <button id="b1">КНОПКА</button>
    <script type="module" src="./JavaScript2338684.js"></script>
    <script type="module">
        import btn from "./JavaScript2338684.js";
        let b1 = document.getElementById("b1");
        b1 = document.addEventListener("click", btn);
    </script>
</body>
</html>
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
24.10.2018, 18:11
amr-now, Ваша фраза не верна потому, что Вы просто видимо не удосужились прочитать документацию, а посему поняли назначение type="module" как бог на душу положит. И в очередной раз пытаетесь втереть всем свои фантазии. Уже в который я прошу Вас этого не делать. Пожалуйста, не надо так

https://developer.mozilla.org/... ent/script
https://blog.whatwg.org/js-modules
https://tc39.github.io/ecma262/#sec-modules
https://hacks.mozilla.org/2015... h-modules/
https://jakearchibald.com/2017... -browsers/

Если по простому
type="module" scr="ПУТЬ ДО ФАЙЛА .JS С ОПРЕДЕЛЕНИЕМ СУЩНОСТЕЙ, КОТОРЫЕ БУДУТ ИСПОЛЬЗОВАТЬСЯ НИЖЕ"
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
25.10.2018, 08:25
malkovan, j2FunOnly, кстати, модуль можно вызывать, как в NodeJS
и два раза не указывать внешний файл.

Запись с внешним модулем покрасивее:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <button id="b1">КНОПКА</button>
    <script type="module">
        import btn from "./JavaScript2338684.js";
        let b1 = document.getElementById("b1");
        b1.addEventListener("click", btn);
    </script>
</body>
</html>
Причём интересная и странная особенность: в пределах своего элемента <script> импорт всплывает (hoisted).

Важное наблюдение: элемент <script type="module"> /* ... */</script> является полностью автономным модулем:
- из других элементов <script> (выше и ниже) импорт не виден.
То есть не имеет смысла объявлять вырожденный элемент <script type="module" src="./n1.js"></script>
, как это делалось для традиционного подключения js-файлов.
- для всех внедренных в html модулей область видимости переменных let отдельная внутри одного элемента <script>,
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <button id="b11">КНОПКА</button>
    <script type="module">
        let b1 = document.getElementById("b11");
        b1.addEventListener("click", btn);
 
        import btn from "./JavaScript2338684.js";
    </script>
    <script type="module">
        alert(b1);
    </script>
</body>
</html>
Выдаст ошибку. А с alert(b11); не выдаст ошибку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.10.2018, 08:25
Помогаю со студенческими работами здесь

Что такое IIS и что такое PWS? Почему одно без другого не работает?
вот уже второй день пытаюсь немного разобраться в АСП. накидал небольшую тестовую страничку. но с серверами я ничего не понимаю! что...

Задача на 2 обработчика событий
Вот текст самой программы:type время = record час: 0..23; мин,...

Создание обработчика событий
На форме компоненты Memo1 и MainMenu, где созданы подпункты TMenuItem. В учебнике нашел процедуру: procedure TForm1.Put(Sender:...

Перегрузка обработчика событий
Я хочу создать прямоугольное поле клеток (используя список). Сами &quot;клетки&quot; это просто наследники от кнопок, собственно кроме пары свойств,...

Отключение обработчика событий
На форме есть несколько чекбоксов, для которых прописаны события this-&gt;checkBox1-&gt;CheckedChanged += gcnew System::EventHandler(this,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru