Прототип addMethods возвращает "неопределенный" - PullRequest
2 голосов
/ 02 февраля 2010

Я пытаюсь добавить метод к объекту Element прототипа с именем locateAncestor (), который найдет и вернет DOM-узел на основе tagName. Мой код выглядит следующим образом:

Element.addMethods({
locateAncestor: function(element,tag) {
    element.ancestors().each(function(e) {
        if (tag == e.tagName) {
            alert(e.id);
            return e;
        }
    });
}});

Тогда я называю код следующим образом:

var form = target.locateAncestor('FORM');
alert(form);

Это, конечно, вызывает два окна оповещения (). Первый, который вызывается внутри цикла each () и успешно предупреждает идентификатор элемента (в данном случае, элемента FORM). Ниже этого первого alert () я возвращаю «e» (что, когда alert () применяется, предупреждает «HTMLFormElement», как и ожидалось. Однако при вызове этой функции второе alert () возвращает «undefined», а не значение Я ожидаю, что будет возвращено, что, конечно, является "HTMLFormElement".

Есть ли какой-то важный шаг, который я здесь упускаю при добавлении метода, что я должен сделать, чтобы вернуть значение?

1 Ответ

1 голос
/ 02 февраля 2010

У вас есть оператор возврата для каждой функции, но нет оператора возврата для функции locateAncestor. Также вы должны использовать «обнаружить» вместо «каждый», потому что вам нужен только один элемент из всего массива.

Element.addMethods({
locateAncestor: function(element,tag) {
    return element.ancestors().detect(function(e) {
        if (tag == e.tagName) {
            alert(e.id);
            return true;
        }
        return false;
    });
}});
...