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

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

22.10.2018, 23:26. Показов 1684. Ответов 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,092
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,092
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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru