jquery - 从函数返回一个值

时间:2011-05-16 15:46:16

标签: javascript jquery function return-value javascript-framework

说我有以下功能:

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.
}  

提前致谢!所有的建议/意见都很受欢迎 干杯

7 个答案:

答案 0 :(得分:4)

注意到循环;看起来你可能想要返回的是所有活动面板的数组(因为理论上可能有多个)。

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)

忘掉所有说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
}

我建议只使用内联选择器而不是制作新功能,但这是一个品味问题,特别是如果你必须在多个地方选择相同的东西。

答案 2 :(得分:0)

只需将控制台行切换为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. 
    // ...
}  

答案 3 :(得分:0)

我认为这就像使用return activePane;

一样简单

答案 4 :(得分:0)

此:

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);

}

答案 5 :(得分:0)

你必须在第一个函数内部返回一些东西来操纵它在第二个函数内:

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

}  

我认为这就是你所需要的。

答案 6 :(得分:0)

如果您想在其他地方使用这些值,您可以保留您的代码并添加一个返回

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!
} 

但是请确保你返回字符串 - 或者如果你想把它作为文本显示在某个地方,请转换为字符串。