почему анонимная функция не работает для меня в JavaScript? - PullRequest
0 голосов
/ 13 февраля 2011

Я новичок в java-script, и я пытаюсь заставить эту функцию работать, но что бы я ни делал, я не могу заставить работать анонимные функции, когда я переключаюсь на нормальную функцию, она работает. я могу жить без анонимных функций, но это действительно раздражает меня. пример: В файле HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<script type="text/javascript" src="ch10_2.js"> </script>
<body>
<a href="http://www.google.com" id="search_link">Go Searching</a> 
</body>
</html>

в файле JavaScript:

var s_link = document.getElementById("search_link"); 

s_link.onclick = function() {  
      var is_sure = window.confirm("Are you sure you want to leave?"); 
      if (!is_sure) { 
        window.alert("OK. You can stay here."); 
        return false; 
      } 
    };

спасибо

Ответы [ 5 ]

3 голосов
/ 13 февраля 2011

Здесь есть несколько проблем, каждая из которых может привести к сбою этого скрипта:

  • Тег скрипта - недопустимая позиция в документе - между тегами и .Он должен быть внутри одного из них.
  • Скрипт пытается получить доступ к переменной с именем 's_link', которая должна указывать на ссылку.Чтобы он ссылался на ссылку, вам нужно извлечь элемент, используя что-то вроде getElementById () или других методов обхода DOM [Правка - я вижу, вы добавили эту строку после публикации вопроса].
  • Если скриптзапускается до отображения элемента (ссылки) (как сейчас), это не повлияет на элемент, так как он еще не существует в документе.Либо оберните его в функцию, которая выполняется при загрузке документа, либо поместите скрипт после элемента в документе.
0 голосов
/ 13 февраля 2011

Как указал мистер Дорвард, ваш сценарий (на ch10_2.js) выполняется до того, как de DOM будет готов.Дело в том, чтобы прикрепить событие к элементу, указанный элемент должен существовать, но, поскольку код javascript выполняется, как только он загружен, остальная часть страницы обычно все еще загружается.Поэтому элемент, к которому вы хотите прикрепить событие, еще не существует.

Я рекомендую эту статью о том, как jQuery (библиотека javascript) справляется с этим: http://www.learningjquery.com/2006/09/introducing-document-ready.

А вотjsbin очень простой пример: http://jsbin.com/eziwu5/edit

0 голосов
/ 13 февраля 2011

Вы должны указать вашему скрипту выполнить после загрузки страницы .Для этого просто оберните код, как показано ниже:

window.onload = function() { 
    // code you had before
}

Причина этого проста.Сценарий в настоящее время выполняется до загрузки страницы.Таким образом, запрос document.getElementById () фактически не выполняется.Это не имеет ничего общего с тем, что ваша функция является анонимной.

0 голосов
/ 13 февраля 2011

Это работает для меня.

Предложение: Обязательно укажите свой код в конце страницы перед </body>.

0 голосов
/ 13 февраля 2011

Ссылка с идентификатором search_link не существует во время выполнения сценария, поэтому ее нельзя получить с помощью getElementById или подобного.Вам нужно отложить выполнение кода (например, поместив его в функцию, которая выполняет onload, или просто переместив элемент <script> на после анализа ссылки (как раз перед тем, как часто рекомендуется </body>).

...