#javascript #jquery #function #return-value #javascript-framework
#javascript #jquery #функция #возвращаемое значение #javascript-фреймворк
Вопрос:
допустим, у меня есть следующая функция:
function checkPanes() {
activePane = '';
var panels = $("#slider .box .panel");
panels.each(function() {
//find the one in visible state.
if ($(this).is(":visible")) {
activePane = $(this).index() 1;
console.log(activePane);
}
});
} //END checkPanes();
В идеале я хотел бы вызвать эту функцию в другом месте (скорее всего, из другой функции),
и извлекает значение, которое я в данный момент выводю на консоль.
(пример ..)
function exampleCase() {
checkPanes(); //evidently, does not return anything.
//Ideally, I want the numerical value, being output to console in above function.
}
Заранее спасибо! Все предложения / комментарии приветствуются.
Приветствия
Комментарии:
1. Вы пробовали
return activePane;
?
Ответ №1:
Только что заметил цикл; похоже, что вы, возможно, захотите вернуть массив всех активных панелей (поскольку теоретически их может быть больше одной).
function checkPanes() {
activePanes = [];
var panels = $("#slider .box .panel");
panels.each(function() {
//find the one in visible state.
if ($(this).is(":visible")) {
activePane.push($(this).index() 1);
console.log(activePane);
}
});
return activePanes;
}
Если вы знаете, что активным всегда будет только один, вы можете вернуться к своему первоначальному подходу и просто добавить return activePane
после console.log
.
Комментарии:
1. Я думаю, что да.. (Я довольно новичок во всем этом) — Тогда мой следующий вопрос: как бы мне войти в консоль, «возвращаемое» значение этой функции? Или использовать это возвращаемое значение в другом месте? (возможно, создайте новую переменную на основе возвращаемого значения) — Приветствия!
2. Если в вашей другой функции вы сделаете что-то подобное
var activePanes=checkPanes();
, возвращаемое значение будет помещено в локальную переменную, и вы сможете использовать его по своему усмотрению (или записать его).
Ответ №2:
Забудьте всех, кто говорит, что return activePane
поскольку они не видели, что это в цикле jQuery each
. Не будет работать.
Я бы предложил реструктурировать ваш селектор. Селектор, который вы должны использовать, это: $("#slider .box .panel:visible")
. Это полностью отключит каждый ваш цикл. Например, вы могли бы реструктурировать код следующим образом:
function checkPanes() {
return $("#slider .box .panel:visible").index();
}
function exampleCase() {
var visiblePane = checkPanes();
// ... do something with the index
}
Я бы предложил просто использовать встроенный селектор, а не создавать новую функцию, но это дело вкуса, особенно если вам приходится выбирать одно и то же в нескольких местах.
Комментарии:
1. Это может быть в цикле, но поскольку комментарий предполагает, что мы ищем панель / one / в видимом состоянии, как только мы ее найдем, мы можем выйти из цикла.
2. это упрощенная версия того, чего я пытаюсь достичь.. Спасибо!
3. ДА! АГА! так просто… Я не смог получить этот простой ответ нигде больше … короткий ответ : если вы структурируете свою функцию как var like
var data = get_data()
вместоget_data()
, то вы можете использовать данные, которые вы получили в этой же функции.
Ответ №3:
Просто переключите строку консоли на оператор return:
function checkPanes() {
activePane = '';
var panels = $("#slider .box .panel");
panels.each(function() {
//find the one in visible state.
if ($(this).is(":visible")) {
activePane = $(this).index() 1;
return activePane; // Return the value and leave the function
}
});
} //END checkPanes();
Для вызова:
function exampleCase() {
var thepane = checkPanes(); //evidently, does not return anything.
// ...
}
Ответ №4:
Я думаю, это так же просто, как использовать return activePane;
Ответ №5:
Это:
function checkPanes() {
activePane = '';
var panels = $("#slider .box .panel");
panels.each(function() {
//find the one in visible state.
if ($(this).is(":visible")) {
activePane = $(this).index() 1;
}
});
return activePane;
} //END checkPanes();
и это:
function exampleCase() {
var myval=checkPanes(); //evidently, does not return anything.
console.log(myval);
}
Комментарии:
1. ах да, значит, вам нужно передать функцию переменной, прежде чем извлекать ее значение для входа в консоль и т.д. Спасибо!
2. Вам не всегда это нужно. Но в большинстве других ответов ваша исходная функция возвращается раньше, что может быть довольно плохо (почти наверняка не в этом случае, но может быть сейчас или в будущем). То, что у меня есть, «безопаснее», чем большинство других, поэтому я использую переменную.
Ответ №6:
Вы можете сохранить свой код и просто добавить возвращаемое значение, если хотите использовать значения где-то еще
function checkPanes() {
activePane = '';
var panels = $("#slider .box .panel");
panels.each(function() {
//find the one in visible state.
if ($(this).is(":visible")) {
activePane = $(this).index() 1;
console.log(activePane); //Logs to console.
return activePane; //Returns value also.
}
});
}
Итак, здесь вы можете либо использовать возвращаемое значение, либо просто записать его в консоль. Вот как я понял ваш вопрос
function exampleCase() {
checkPanes(); //Now it will still write in console. but you dont need to use the return
alert(checkpanes()); //Would write it to console and to an alert!
}
Но убедитесь, что вы возвращаете string — или конвертируете в string, если хотите где-то отключить его в виде текста.
Ответ №7:
вы должны вернуть что-то внутри первой функции, чтобы манипулировать этим внутри второй:
function checkPanes() {
activePane = '';
var panels = $("#slider .box .panel");
//create a return array
visiblePanels = [];
panels.each(function() {
//find the one in visible state.
if ($(this).is(":visible")) {
activePane = $(this).index() 1;
//add the result to the returnb array
visiblePanels[] = activePane
}
});
// return results
return visiblePanels;
}
function exampleCase() {
var thepane = checkPanes();
//now it has all the visible panels that were founded in the other function
// you can access them with thepane[0] or iterate on them
}
Я думаю, это то, что вам нужно.