2015-12-24 6 views
0

Скажем, у меня есть некоторые элементы привязки HTML, и я хотел бы установить обработчик для каждого из них.Передача значения функции в JavaScript

window.onload = function() { 
    // I select all of the anchors 
    var myAnchors = document.querySelectorAll("a"); 

    // I iterate through the anchors and set a handler to each of them 
    for (var i = 0; i < myAnchors.length; i++) { 
     myAnchors[i].onclick = handleControl; 
    } 
} 

function handleControl(e) { 
    var id = e.target.getAttribute("id"); 
} 

Я не могу понять, как установка обработчика передает аргумент функции handleControl. Другими словами, как myAnchors[i].onclick = handleControl; передает значение e в обработчик?

Я получил этот код из книги программирования JavaScript.

ответ

6

Это не так. В основном вы говорите, какая функция должна быть используется, когда в какой-то момент времени становится доступным. Так, например, вы говорите, что при нажатии ссылки вызывается вызываемая вами функция handleControl. Параметр e передается ему браузером, который представляет информацию о событии клика.

Так что думайте об этом, как:

  1. браузер обнаруживает нажмите на ссылку
  2. это создает «объект события», который содержит информацию о событии
  3. он вызывает функцию обработчика, указанный с «объект события» в качестве аргумента. Вы можете себе представить, что он делает что-то вроде anchor.onclick(event_info), где event_info соответствует параметру e, который у вас есть на handleControl.

Имейте в виду, что это не обязательно точно, что происходит, но дело в том, чтобы ответить на ваш вопрос о том, что параметр приходит из других (в данном случае, браузер), и передается на вызов указанной функции.

+4

Наконец-то кто-то, кто прочитал настоящий вопрос. Было просто копаться через спецификацию, чтобы увидеть, могу ли я найти точку, которая на самом деле определяет это поведение, но еще не найдена ... Подозреваю, что он похоронен в [этом бите] (https://w3c.github.io/uievents/) где-то ... –

+0

@JamesThorpe Возможно, этот? ['interface EventListener {void handleEvent (в событии evt); }; '] (http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventListener) – Andreas

+0

@Andreas Я больше искал бит, который определяет создание' Event' перед вызовом обработчика, но я остановился на некоторое время назад :) –

1

Я считаю, вы просто хотите знать, как?

В непрофессионала условиях:

  1. привет, им элемент, и вы можете нажать на меня
  2. Хорошо, когда я нажимаю на вас Я хочу, чтобы функция handleControl должна быть выполнена, здесь вы получили ссылку к этой функции.
  3. Спасибо
  4. Пользователь щелкает
  5. Oh Boy! Я нажимаю, давайте посмотрим, есть ли у меня ссылка функции на мой атрибут onclick.
  6. Да .. да, я делаю!Хорошо, позвольте мне стрелять эту функцию и дать некоторую информацию о событии, делая это
  7. Calling this.onclick(e); с e будучи Event объектом, и this.onclick ссылка на функцию обработчика

Если это не то, что вы просили, я чувствую себя глупо, и вы можете игнорировать это;)

0

Так что, когда вы делаете

myAnchors[i].onclick = handleControl; 

вы на самом деле регистрации обратного вызова functi на Событие кликов элемента myAnchors [i].
Механизм dom браузера отслеживает все обратные вызовы для каждого события для каждого элемента dom. Теперь, когда событие возникает для элемента, тогда оператор dom вызывает все обратные вызовы, соответствующие элементу и этому событию. Но он вызывает параметр, являющийся объектом события.

3

Ваш вопрос заключается в том, как установка обработчика передает аргумент функции handleControl. Другими словами, как myAnchors[i].onclick = handleControl; передает значение e в обработчик?

Так, onClick событие будет вызывать одну функцию:

function(e) { 
    // Whatever you want to do with clicked 'anchor' e, do it here 
} 

Внутри вы получите щелкнутой объект якорь, как e здесь.

В вашем примере функция

function handleControl(e) { 
    var id = e.target.getAttribute("id"); 
} 

делает то же самое.

0

Здесь функция handleControl подписана на элемент DOM.
Так что, если какие-либо триггеры события щелчка из DOM, информация о событии e будет передана подписанному методу.

Смежные вопросы