Один большой аргумент против встроенных обработчиков событий и аргумент, который решается другими ответами здесь, - это разделение представления и логики .
Однако на самом деле существует большая проблема IMO: как-то неуловимый способ оценки обработчиков inline-событий.
Как вы можете теперь, содержимое атрибутов on*
будет использоваться как body события обработчик функция. Но какие характеристики имеет эта функция?
Одним из удивительных является то, что свойства некоторых элементов-предков и самого элемента находятся в области обработчика inline-событий.
Нажмите на button
журналы
[object HTMLInputElement]
undefined
в консоли. Тот факт, что window.foo
является undefined
, говорит вам, что глобальная переменная отсутствует foo
. Итак, откуда взялась переменная foo
? Почему console.log(foo)
регистрирует входной элемент и не бросает опорную ошибку? Поскольку свойства элемента form
находятся в области действия обработчика события, а элемент form
имеет свойство для каждого элемента управления указанной именованной формы, который он содержит. Вы можете легко проверить это с помощью console.log(document.querySelector('form').foo)
.
Теперь щелчок по элементу div
фактически вызывает опорную ошибку:
ReferenceError: foo is not defined
Таким образом, очевидно, что элемент
form
находится только в области элементов управления формой, а не для любого потомка.Аналогично, свойства объекта
document
также находятся в области встроенных обработчиков событий, которые могут привести к некоторым неожиданным ошибкам (знаете ли вы, чтоdocument
имеет свойствоplugins
?).Как точно вычисляются обработчики обработанных событий, формализованные в спецификации HTML5 . Имейте петлю на шаге 10, в частности, где описано создание цепочки видимости.
Заключение:
Из-за этого неявного соединения между элементами и inline обработчики событий, ошибки могут быть очень трудно отслеживать. Конечно, отлично использовать встроенные обработчики событий, если вы просто хотите что-то проверить. Но использование их в производственном коде требует более высоких затрат на обслуживание.
Статьи на quirksmode.org объясняют разные способы привязки обработчиков событий и их (dis) преимуществ.
На самом деле, есть команды, специфичные для папок. Измените вашу функцию следующим образом:
var subFolders = folder.getFolders();
while (subFolders.hasNext()
{
var childFolder = childFolders.next();
var folderID = childFolder.getId();
Logger.log(folderID);
}
Получил работу с кодом ниже.
Спасибо Дж. Г. за помощь, ваш вклад заставил его работать!
function generateFolderIndex(id) {
var folder = DriveApp.getFolderById('[ID]');
var subFolders = folder.getFolders();
var childFolders = subFolders
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Projekt');
sheet.clear();
sheet.appendRow(["Projekt", "Länk", "Skapad"]);
while (subFolders.hasNext())
{
var childFolder = childFolders.next();
var folderID = childFolder.getId();
var name = childFolder.getName()
var link = childFolder.getUrl()
var date = childFolder.getDateCreated()
data = [name, link, date, ]
sheet.appendRow(data);
}
};