Задать вопрос
@AfterKlugge
Программист, стартапер

Не работает простой обработчик событий on.click на Javascript, почему?

Вот HTML-код
<!DOCTYPE HTML>
<html lang="en">
<head>
	<title>My playlist</title>
	<meta charset="utf-8">
	<script src="playlist.js"></script>
	<link rel="stylesheet" href="playlist.css">
</head>
<body>
	<form>
		<input type="text" id="songText" size="40" placeholder="Song name">
		<input type="button" id="addButton" value="Add Song">
	<ul id="playlist">
	
	</ul>
	</form>
</body>
</html>

Javascript-код, в отдельном файле.
window.onload = init;
function init() {
	var button = document.getElementById("addButton");
	button.onclick = handleButtonClick;
}
function handleButtonClick() {
		alert("Button was clicked!");
}

В HTML я создал две формы, сначала решил поработать с addButton, задать ему такой скрипт, что при добавлении любого текста в строковое меню и клике на "Add song", Javascript выдавал диалоговое окно с текстом "Button was clicked". Однако ничего не выходит, браузер не реагирует вообще (Firefox, Ubuntu 14.10), битый час сижу, не могу разобратся в чем проблема. Ткните носом в проблему, пинайте, главное дайте разобратся. Всем спасибо.

ЗЫ: Гуглил, но выходят сразу полные результаты пошагового курса HTML5, а я с промежуточными разобратся не могу (код взят из книги Head First)
  • Вопрос задан
  • 8011 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
Попробуйте убрать ограничения так
window.onload = init;

function handleButtonClick() {
		alert("Button was clicked!");
}

function init() {
	var button = document.getElementById("addButton");
	button.onclick = handleButtonClick;
}
Ответ написан
BedwaRe
@BedwaRe
Пиши код
Вообщем ответ содержится в этом предложении:
The ready event occurs after the HTML document has been loaded, while the onload event occurs later, when all content (e.g. images) also has been loaded. Источник
В твоем случае, дом дерево еще не содержит тега с #addbutton. Соответсвенно код на него не может быть повешен. Помести свой скрипт в конец дом или используй jQuery $(document).ready.
Ответ написан
@kurt_live
Проверьте, чтобы не было лишних пустых строк в файле js после }. Скопировал ваш пример себе - работает великолепно. Вам также не мешает обзавестись инструментами отладки. Например, в Google Chrome есть встроенная консоль javascript. Она помогает локализовать строки с ошибками.
Удачи
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы