我对此有点新意,但我想知道如何从这个函数中获取数据(即: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');
});
感谢
答案 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');