Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   не так работает событие click (https://javascript.ru/forum/events/73787-ne-tak-rabotaet-sobytie-click.html)

АндрейD 22.05.2018 09:25

Цитата:

Сообщение от j0hnik (Сообщение 485743)
АндрейD,

<input type="submit" value="1" id="a">
<script>
var a = document.getElementById('a');
a.onclick = go;
function go() {
 alert(a.getAttribute('value'));
}
</script>


может не в этом куске кода дело?

Больше ничего нет, это задача. 1-я строка - это html страница, а <script> - прикреплённый файл js. Причём, если вызываю функцию onclick="go()" из html файла, вот так:

<input type="submit" value="1" onclick="go()" id="a">

а в js файл ставлю ту же строку:

function go() {
var elem = document.getElementById('a');
alert(a.getAttribute('value'));
}
то всё прекрасно работает. Но вызов

var a = document.getElementById('a');
a.onclick = go;

никак не идёт.

рони 22.05.2018 09:53

АндрейD,
скрипт где после input или до?

АндрейD 22.05.2018 10:01

Он в прикреплённом файле js. Но я пробовал этот код размещать и в html, после input. Не помогло.

АндрейD 22.05.2018 10:09

Вот пробую, alert показывает, что переменная "a" null. Что то странно.
var a = document.getElementById('a');
alert(a);

рони 22.05.2018 10:32

Цитата:

Сообщение от АндрейD
а в js файл ставлю ту же строку:

function go() {
var elem = document.getElementById('a');
alert(a.getAttribute('value'));
}

alert(elem.getAttribute('value'));

АндрейD 22.05.2018 10:59

Извините за опечатку в приведённом примере - писал его тут по памяти. Вот из редактора:
<input type="submit" value="1" id="a">


var a = document.getElementById('a');
a.onclick = go;
function go() {
alert(a.getAttribute('value'));
}

рони 22.05.2018 11:25

АндрейD,
работает?
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<input type="submit" value="1" id="a">


 <script>
 var a = document.getElementById('a');
a.onclick = go;
function go() {
alert(a.getAttribute('value'));
}


</script>
</body>
</html>

АндрейD 22.05.2018 12:14

Да, работает. Ничего не понимаю - сейчас тоже скопировал свой код из js файла в html и заработало. В чём тогда причина? Уж и 'use strict' удалил. Спасибо за помощь! Вот если бы ещё разобраться - почему из отдельного файла не получается.

АндрейD 27.05.2018 22:12

Дублирую сообщение
 
Итак, ответ я нашёл в книге "Шаблоны JS". Оказывается размещать ссылку (типа <script src="js/file_js.js"></script>) на прикреплённый файл js в <head> - это худший антишаблон! Правильнее всего прописывать её в конце страницы, перед закрывающим тегом </body>. Я это сделал и всё заработало!

Rise 28.05.2018 02:59

АндрейD,
ниче не худший, нормальный шаблон, просто надо понимать как DOM устроен.


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