0

首先为我的英语不好找借口,我尝试使用以下 javascript 代码,我想返回 id 变量并在其他函数中使用它,但它似乎无法正常工作并且没有返回它,有人可以帮我写这个

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

我想在这个函数中使用 var idcb :

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

8 回答 8

2

为此,jqueryclick实现需要知道您传递给它的函数返回一个值,并且它本身应该返回该值——事实并非如此。

相反,你可以使用一些闭包魔法来轻松地做到这一点。尝试这个:

var idcb;
$('.box').click(function() {
    idcb = $(this).attr('id');
});
于 2013-08-01T17:49:10.727 回答
1

您将匿名函数传递给事件处理程序,您不能从这种类型的函数返回值。解决方案是使用闭包来解决这个问题:

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

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

于 2013-08-01T18:05:33.463 回答
0

该函数作为 click 函数的参数给出,并在用户单击元素时异步运行。所以你不能直接返回一个值,因为函数不会立即运行。您可以以另一种方式查找 id 值,或者将其传递给要使用的函数而不是返回它,或者只是这样做:

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

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

   $(id).slideToggle("slow");
});
于 2013-08-01T17:48:46.243 回答
0

你不能按照你想要的方式去做。但是,您可以做的是使用两个函数都可以访问的变量在它们之间共享值。

var icdb = 'test';

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

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

a();
b();

您还可以调用bfroma并将变量作为参数传递:

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

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

a();
于 2013-08-01T17:49:51.397 回答
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
 });
于 2013-08-01T17:50:47.720 回答
0

看一下这个

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

$(".hs").click(function() {
    $("#"+id).slideToggle("slow");
    return false;
});
于 2013-08-01T17:52:03.583 回答
0

您可以传入一个对象作为对 click 函数的引用并更改回调中的值。另一种选择是使用闭包 这个 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");  
});
于 2013-08-01T17:59:28.003 回答
-1

你可以这样做:

$(".hs").on('click', function() {
   var id = $('.box').attr('id');
   alert(id);
});
于 2013-08-01T17:49:17.527 回答