jquery — возвращает значение из функции

#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

}  
  

Я думаю, это то, что вам нужно.