2013-08-01 46 views
0

首先,我的弱英语的借口,我尝试使用下面的JavaScript代码,我想返回id变量并在其他函数中使用它,但它似乎不起作用正确,不会返回,谁能帮我出书面方式这返回一个变量从.click()javascript函数

var idcb = $('.box').click(function() { 
    var id = $(this).attr('id'); 
    return id; 
}); 

我想用VAR idcb在这个函数:

$(".hs").click(function() {  
    $(idhs).slideToggle("slow"); 
     return false; 
    }); 
}); 

回答

0

功能是作为参数的点击功能和在用户点击元素时异步运行。所以你不能直接返回值,因为函数不会立即运行。你可以看一下id值的另一种方式,或者将它传递给一个函数来工作,而不是返回它的,或者只是这样做:

var idcb = $('.box').click(function() { 

    var id = $(this).attr('id'); 

    $(id).slideToggle("slow"); 
}); 
2

对于工作,jQuery的click实施将需要知道你传递的函数会返回一个值,并且它本身应该返回该值 - 事实并非如此。相反,您可以使用一些闭包魔法来轻松完成此操作。试试这个:

var idcb; 
$('.box').click(function() { 
    idcb = $(this).attr('id'); 
}); 
+0

我试过,但没有工作 – Samiaviper

+0

你的代码工作的很好,而且我犯了一个错误,但是还有另一个问题,当我点击变量时会设置,但是应该再点击一次,工作正确,怎么可能隐藏功能并点击功能继续? – Samiaviper

+0

你可以打另一个。我不完全确定这是你想要的,但因为你的问题有点不清楚... –

-1

你可以这样来做:

$(".hs").on('click', function() { 
    var id = $('.box').attr('id'); 
    alert(id); 
}); 
0

你不能做到这一点,你正在尝试的方式。但是,您可以做的是使用两个函数都可以访问的变量来共享它们之间的值。

var icdb = 'test'; 

function a() { 
    icdb = 'another value'; 
} 

function b() { 
    console.log(icdb); 
} 

a(); 
b(); 

您也可以打电话从ab和传递变量作为参数:

function a() { 
    b('test'); 
} 

function b(icdb) { 
    console.log(icdb); 
} 

a(); 
0

您的变量idcb包含单击处理!

你需要声明vriable处理程序外,并分配到这里面来完成这项工作:

var idcb = null; 

// ... whatever 
$('.box').click(function() { 
    idcb = $(this).attr('id'); 

    return true; // return 'true' from an event handler to indicate successful completion 
}); 
0

Check this out

var id=null; 
$('.box').click(function() { 
    id = $(this).attr("id"); 
}); 

$(".hs").click(function() { 
    $("#"+id).slideToggle("slow"); 
    return false; 
}); 
+0

我用你的代码,但它没有工作,我把一个警报函数放在第一个函数中,它显示了真正的值,但是当我把它放在外面时,它显示空值,我该如何解决这个问题? – Samiaviper

+0

你有一个点击事件,所以你需要在设置值之前点击.box。 – Konstig

+0

如果你只想得到.box的id,那么你可以做$(“.box”)。attr(“id”);你可以在jsfiddle上发布你的代码,这样我可以选择你想做的事情吗? – Konstig

0

你可以在传递一个对象作为对参考点击功能 并更改回调中的值。另一个选择是使用闭包 这个jsfiddle的警告是你必须先调用一个.box元素。

http://jsfiddle.net/D6B73/2/

var idcb = {}; 
$('.box').click(idcb, function (event) { 
     event.data.value = $(this).attr('id'); 
     console.log(idcb.value); 
}); 

$('.hs').click(function() {  
    $('#'+idbc.value).slideToggle("slow"); 
}); 
+0

thnx,这很好,但我想继续运行2函数,意思是先获取.box div的id并立即运行.hs函数和幻灯片这是部分,怎么样? – Samiaviper

+0

你真的需要.hs电话吗?难道你不能在.box中点击滑动吗?你可以做一些像[this](http://jsfiddle.net/D6B73/3/)。在这一点上,虽然你不会注意到idcb变量, – CBIII

+0

这里是url:http://itsun.ir/test/,我的目标是当用户点击关闭图标时,.box div隐藏,。 hs只是处理隐藏.box div,你有更好的想法做到这一点? – Samiaviper

1

你传入一个匿名函数将事件处理程序,你不能从这种类型的函数返回一个值。解决的办法是使用闭包来解决这个问题:

var idcb = null; 
$('.box').click(function() { 
    idcb = $(this).attr('id'); 
}); 

变量idcb将始终设置为被点击的最后.box的的ID。