JavaScript: проблемы с назначением обработчиков событий - PullRequest
1 голос
/ 18 февраля 2010

Я не уверен, что я делаю здесь не так:

index.html

<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "XHTML1-s.dtd" >
<html xmlns="http://www.w3.org/TR/1999/REC-html-in-xml" xml:lang="en" lang="en" >

<head>
    <script type="text/javascript" src="scripts/eventInit.js"></script>
</head>
<body>
<p id="javascriptWarning">This page will not work with JavaScript disabled.</p>
</body>
</html>

eventInit.js

window.onload = function () {
    alert("check"); // works
    var jsWarning = document.getElementById("javascriptWarning");
    jsWarning.onclick = function () {
        alert("hi"); // works
    };
    jsWarning.onload = function () {
        alert("loaded"); // fails
    };
}

И все же ничего не происходит. Что я делаю неправильно? Я пробовал другие события, такие как onmouseover и onload.

Я делаю это в Visual Studio, и intellisense не дает мне возможности устанавливать какие-либо обработчики событий. Это потому, что я делаю это неправильно?

Я подтвердил, что JS работает над моей настройкой; просто вставив alert("hi") в скрипт и включив в него все работает.

Может быть важно отметить, что я делаю это в JScript, поскольку я использую Visual Studio 2010, так что, возможно, обработка событий отличается?

Обновлено для удаления '-' из имени идентификатора, но оно все равно не работает.

Обновлено добавлен блок window.onload. Теперь onclick работает, но onload не работает.

Ответы [ 8 ]

1 голос
/ 18 февраля 2010

Вы пытаетесь установить событие загрузки для абзаца. Только объекты, которые загружают внешние данные (окно, фрейм, iframe, img, скрипт и т. Д.), Имеют событие загрузки.

Некоторые библиотеки JS реализуют событие available (например, YUI ) - но вы знаете, что абзац доступен, поскольку вы устанавливаете на него событие, и вы не могли сделать это, если он был недоступен.

1 голос
/ 18 февраля 2010

Вместо этого:

jsWarning.onload = function () {
        alert("loaded"); // fails
    };

попробуйте это

if(jsWarning) alert("loaded");

Я думаю, что кто-то из вышеупомянутых проверял наличие элемента. На этом этапе элемент должен присутствовать, но он не причиняет вреда.

1 голос
/ 18 февраля 2010

Сценарий выполняется до того, как нужный элемент существует.Кроме того, я не думаю, что p имеет событие onload.Окна, рамки и изображения, да, но абзацы?

Вы должны использовать <body onload="init();"> или window.onload=function(){ … } или библиотечную функцию, если вы используете библиотеку.Пример:

index.html

<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "XHTML1-s.dtd" >
<html xmlns="http://www.w3.org/TR/1999/REC-html-in-xml" xml:lang="en" lang="en" >
<head>
<script type="text/javascript" src="scripts/eventInit.js"></script>
</head>
<body>
<p id="javascriptWarning">This page will not work with JavaScript disabled.</p>
</body>
</html>

scripts / eventInit.js

window.onload=function(){
  alert('JS is working!');}

Редактировать: Хорошо,Я очень уверен, p не использует обработчик событий onload.И это неудивительно, вам это не нужно.Если вы хотите выполнить код JS сразу после завершения абзаца, сделайте следующее:

<p>
<!-- stuff -->
</p>
<script type="text/javascript">
/* stuff */
</script>
1 голос
/ 18 февраля 2010
  1. Вам нужно подождать, пока документ будет проанализирован, прежде чем вы сможете искать элементы по значению "id". Поместите настройки обработки событий в функцию «onload» объекта window.
  2. Браузер не будет запускать событие onload для вашего тега <p>. В любом случае вам это не понадобится, если вы выполняете свою работу в обработчике «onload» для окна в целом.
  3. [soapbox] Используйте рамки.
1 голос
/ 18 февраля 2010

может быть, вы забыли поместить блок кода внутри

window.onload = function() {
          // btn click code here 
  }
0 голосов
/ 18 февраля 2010

onload - это событие окна.

0 голосов
/ 18 февраля 2010

Я думаю, вы должны убедиться, что ваш JavaScript обязателен.

Является ли ваш javascript до или после элемента абзаца, по какой-то причине мой мозг стремится к этому.

Я бы хотел использовать что-то вроде jQuery, это поможет.

с использованием jQuery ваш код будет (с соответствующими файлами jQuery, конечно) :

$(document).ready(function()
{
    $("#javascript-warning").click(function(){
        alert("HELLO");
    });
});
0 голосов
/ 18 февраля 2010

Я не думаю, что дефисы допустимы в именах классов при использовании в сочетании с JavaScript. Вместо этого попробуйте подчеркнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...