я написал метод следующим образом:Почему эта часть кода всегда возвращает «no_conflict»?
detectNameConflict: function() {
var existing_filenames = this.element.find('ul.existing_files > li');
if (existing_filenames.length > 0) {
var try_name = this.element.find('div.target_filename').text().trim();
existing_filenames.each(function(index, el) {
if ($(el).text() == try_name) {
return "contain_conflict";
}
});
} else {
return "no_conflict";
}
},
Этот код не работает, потому что он всегда возвращается «no_conflict», даже когда есть конфликт имен.
примечание: this.element
- от фабрики виджета jQueryUI. Он относится к элементу DOM, на котором подключен экземпляр виджета.
Кстати, это многокамерного точка возврата считается плохой практикой в JavaScript? –
Множественные точки возврата вполне приемлемы, но они не работают из внутренних вложенных функций. Ваш '' contains_conflict "' не возвращается из внешней функции, он возвращается из внутренней функции, которую вы создали. – 4castle
Единственное, что '.each()' использует возвращаемое значение для принятия решения о продолжении цикла. Если вы вернете «false», цикл остановится, иначе он продолжит движение. – Barmar