Живите
Прототип в настоящее время не имеет "живой" поддержки. Вы можете сделать что-то похожее с делегированием событий. Вот где вы наблюдаете за событием в родительском элементе, а затем в обработчике событий выясняете, с каким дочерним элементом произошло событие, на самом деле:
$('theFormID').observe('click', handleFormClick);
function handleFormClick(event) {
var element;
// Get the element on which the click occurred
element = event.findElement();
}
Делегирование событий возможно только с событиями, которые всплывают (например, «щелчок»); Я не знаю, есть ли такая же проблема в живом материале jQuery.
Приятно то, что вы можете передавать селекторы CSS в Event#findElement
:
$('tbodyID').observe('click', handleTableClick);
function handleTableClick(event) {
var element;
// Get the element on which the click occurred
element = event.findElement('tr');
}
... который находит tr
, по которому щелкнули, даже если фактический щелчок произошел в пределах span
внутри td
внутри tr
.
Правильное использование делегирования событий может значительно упростить зацепление / открепление элементов, особенно при динамическом добавлении и удалении элементов.
Я не удивлюсь, если есть плагин для Prototype, который поддерживает "вживую".
Родитель
Вы упомянули, что хотите получить родителя для элемента управления, по которому щелкнули. Когда вы подключаете обработчик с помощью Prototype, по умолчанию он настраивает все так, что в вашем обработчике this
ссылается на элемент, для которого вы установили обработчик события. Например, если у вас есть div
с идентификатором foo
:
$('foo').observe('click', function(event) {
// Here, `this` will refer to the `foo` element
});
Затем вы можете использовать прототип Element # up , чтобы получить родительский элемент. (Если вы используете делегирование события и сначала перехватываете событие на родительском элементе , конечно, просто используйте this
напрямую, и если вам также нужно получить ссылку на объект, который был нажат , используйте #findElement
как указано выше.)