Есть ли эквивалент следующего в прототипе? - PullRequest
1 голос
/ 10 марта 2010

Особенно немного о живом ....

 jQuery('.something').live('click', function() {
     jQuery(this).parent('form').reset();
 });

Полагаю, это также может сработать, хотя мне любопытно, какая из родительских функций:

 jQuery('.something').live('click', function() {
     this.form.reset();
 });

1 Ответ

3 голосов
/ 10 марта 2010

Живите

Прототип в настоящее время не имеет "живой" поддержки. Вы можете сделать что-то похожее с делегированием событий. Вот где вы наблюдаете за событием в родительском элементе, а затем в обработчике событий выясняете, с каким дочерним элементом произошло событие, на самом деле:

$('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 как указано выше.)

...