2016-11-21 5 views
0

Это мой JS содержимое файла:Prototype огонь по проблеме изменения событий

window.onload = function() { 
    obj = document.getElementById("_accountwebsite_id"); 
    Event.observe(obj, 'change', function() { 
     alert('hi'); 
    }); 
} 

Я хочу сгореть на изменения событие для моего выпадающего списка: _accountwebsite_id. Библиотека прототипа загружается перед этим файлом. У меня не было ошибок в консоли. Где я не прав? thx

ответ

1

Вы делаете здесь дополнительную работу, которую Prototype делает для вас. Во-первых, установка метода документа onload не только является действительно старой школой, но и будет сбивать любой ранее установленный наблюдатель на этом событии.

$(document).observe('dom:loaded', function(...){...}); 

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

Далее вы используете getElementById, который будет работать, но не возвращает объект с расширенным прототипом в некоторых браузерах.

$('element-id'); 

... будет получать ссылку на элемент и расширять его, если ваш браузер не соблюдает все аспекты прототипного наследования.

Наконец, все это может быть сделано как более простым, так и более пуленепробиваемым, используя отложенного наблюдателя. Представьте, что ваш интерфейс DOM был обновлен Ajax - это заставит вашего наблюдателя пропустить события, запущенные этим элементом select, потому что он не ссылался на один и тот же элемент (===), даже если идентификатор сопоставлен.

$(document).on('change', '#_accountwebsite_id', function(evt, elm){ 
    alert(elm.inspect()); 
}); 

Этот наблюдатель будет реагировать на любое событие изменения на элементе с правильным ID, даже если он был добавлен после того, как наблюдатель был зарегистрирован в документе.

+0

Я не знаю, как поблагодарить вас !!!!! –

+0

Я просто заметил некоторые опечатки, поэтому перезагрузите, прежде чем использовать это прямо! – Walter

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