2013-08-01 44 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。