从函数中获取数据

时间:2011-08-24 18:22:57

标签: javascript jquery

我对此有点新意,但我想知道如何从这个函数中获取数据(即:shapeID)并将其传递给其他函数,使其成为全局变量。

$('.shapes li').click(function(shapeId){
    var shapeId = $(this).find('a').attr('id');
    var shapeImg = $(this).find('img');
    step2.find('div.wrapper').attr('id', shapeId);
    shapeImg.clone().appendTo('#step2 .model', '#results .model');
    step1.fadeOut('500',shownext);
    step2.find('.waist_box').show();
    step2.find('.hotspots #waist').addClass('active');
});

感谢

5 个答案:

答案 0 :(得分:4)

只需在函数外声明shapeId

var shapeId = null;

$('.shapes li').click(function(){
    shapeId = $(this).find('a').attr('id');
    var shapeImg = $(this).find('img');
    step2.find('div.wrapper').attr('id', shapeId);
    shapeImg.clone().appendTo('#step2 .model', '#results .model');
    step1.fadeOut('500',shownext);
    step2.find('.waist_box').show();
    step2.find('.hotspots #waist').addClass('active');
});

答案 1 :(得分:2)

您可以使用回调:

$('.shapes li').click(function(){
    var shapeId = $(this).find('a').attr('id');
    setShapeID(shapeID);
    var shapeImg = $(this).find('img');
    step2.find('div.wrapper').attr('id', shapeId);
    shapeImg.clone().appendTo('#step2 .model', '#results .model');
    step1.fadeOut('500',shownext);
    step2.find('.waist_box').show();
    step2.find('.hotspots #waist').addClass('active');
});

function setShapeID(id){
   shapeID = id; //<<in global namespace
}

然后在任何其他函数中如果要使用它,请检查它是否已定义:

if(shapeID !== undefined){
    //use it!
}

以上假设你想要污染全局命名空间。

如果您不想这样做,那么您可以使用一个对象来保存您的ID:

var IDs = {
    shape: null
}

$('.shapes li').click(function(){
    var shapeId = $(this).find('a').attr('id');
    IDs.shape = shapeID; //<<set the shapeID
    var shapeImg = $(this).find('img');
    step2.find('div.wrapper').attr('id', shapeId);
    shapeImg.clone().appendTo('#step2 .model', '#results .model');
    step1.fadeOut('500',shownext);
    step2.find('.waist_box').show();
    step2.find('.hotspots #waist').addClass('active');
});

然后在外面,您可以通过shapeID

轻松使用IDs.shape

答案 2 :(得分:1)

如果要在函数外部访问ShareId,只需在函数外部声明:

var shapeId;
$('.shapes li').click(function(shapeId){
    shapeId = $(this).find('a').attr('id');
    var shapeImg = $(this).find('img');
    step2.find('div.wrapper').attr('id', shapeId);
    shapeImg.clone().appendTo('#step2 .model', '#results .model');
    step1.fadeOut('500',shownext);
    step2.find('.waist_box').show();
    step2.find('.hotspots #waist').addClass('active');
});

function whatever(){
   alert(shapeId);
}

答案 3 :(得分:1)

也许你可以将它包装在一个匿名函数中,而不是使它成为一个真正的全局变量?

(function($) {
  var shapeId;
  $('.shapes li').click(function(){
    shapeId = $(this).find('a').attr('id');
    var shapeImg = $(this).find('img');
    step2.find('div.wrapper').attr('id', shapeId);
    shapeImg.clone().appendTo('#step2 .model', '#results .model');
    step1.fadeOut('500',shownext);
    step2.find('.waist_box').show();
    step2.find('.hotspots #waist').addClass('active');

    myfunction();
  });

  function myfunction()
  {
      console.log(shapeId);
  }
})(jQuery);

或者从当前函数中调用该函数:

  $('.shapes li').click(function(){
    var shapeId = $(this).find('a').attr('id');
    var shapeImg = $(this).find('img');
    step2.find('div.wrapper').attr('id', shapeId);
    shapeImg.clone().appendTo('#step2 .model', '#results .model');
    step1.fadeOut('500',shownext);
    step2.find('.waist_box').show();
    step2.find('.hotspots #waist').addClass('active');

    myfunction(shapeId);
  });

  function myfunction(theId)
  {
    console.log(theId);
  }

答案 4 :(得分:1)

其他答案是正确的,除了工作你还必须从函数参数列表中删除shapeId。反正它没有任何意义,因为它只是为它分配了一个Event对象,然后你就把它覆盖掉了。

变化:

$('.shapes li').click(function(shapeId){
    var shapeId = $(this).find('a').attr('id');

要:

var shapeId; // shapeId in outer scope
$('.shapes li').click(function(){
    shapeId = $(this).find('a').attr('id');