2013-05-12 27 views
0

我覺得我會在我心裏這個!我寫了一組常見問題的,但我只想在一次顯示一個答案......jQuery的使用代碼來幫助之間切換接聽

這裏是我的代碼...

function show_response(id) 
{ 
//loop to hide any open responses 
for(i = 1; i <= $('.faq_response').length; i++) 
    { 
    if($('#faq'+i) != id) //This line was missing the $ and brackets but that didn't solve the problem. 
     $('#faq'+i).css('display','none'); 
    } 
//show or hide the response depending on its current state 
$('#'+id).toggle(); 
} 

目前,如果我點擊一個問題,響應顯示。如果我然後點擊不同的問題,則會隱藏前面的回覆並顯示新的回覆。如果我點擊一個問題的答案已經顯示,它應該隱藏,但它不會做任何事情。

如果我屏蔽掉的代碼迴路位,切換部分工作正常。

希望其他人能看到之前我最終沒有頭髮,我已經走了錯了!

在此先感謝

保羅

+0

這應該是很容易弄清楚,如果你使用類似Firebug的調試器。不幸的是,我現在在iPad上... – jahroy 2013-05-12 00:16:37

+0

我使用的是螢火蟲,它並沒有告訴我任何錯誤! – Paul 2013-05-12 00:17:49

+0

它應該表明你隱藏了for循環中的每個元素......然後在之後切換其中一個元素。在for循環中放置一個斷點。有很多更好的方法可以用jQuery來做到這一點...但是我無法在iPad上快速輸入它們! – jahroy 2013-05-12 00:18:33

回答

0

在你的if語句擺脫#的是這樣的:

function show_response(id) { 
    for (i = 1; i <= $('.faq_response').length; i++) { 
     var s = 'faq' + i; 
     if (s != id) { 
      $('#' + s).css('display','none'); 
     } 
    } 
    $('#' + id).toggle(); 
} 

你在你的for循環切換其中的一個隱藏的每一個元素之後。 Presumeably不關你的id

實際包含#象徵。

+0

我可能是錯的,但我認爲你使用一個點,如果一個類,#如果一個ID。按照建議去掉#,現在螢火蟲告訴我有語法錯誤! – Paul 2013-05-12 00:21:12

+0

@保羅 - 我的意思是從比較id到字符串的行中刪除井號。您將原始ID與包含磅符號的ID進行比較......您的ID中沒有包含任何ID。只需使用Jason提供的答案(並upvote mine)即可。 – jahroy 2013-05-12 00:25:02

+0

我很困惑,沒有英鎊符號!?!? – Paul 2013-05-12 00:29:04

0

無需循環。

你的HTML可能是:

<div class="answer" id="foo"> 

然後隱藏他們所有,並顯示你想要的:

$(".answer").hide(); 
$("#" + id).show().click(function(){$("#" + id).hide()}); 

可能是一個更好的語法,但你的想法。

+0

這個問題與邏輯有關。如果響應已打開,我希望它再次點擊時關閉。相反,點擊後,它會關閉,然後再次打開。 – Paul 2013-05-12 00:28:46

+0

好的,答案已更新。 – Jason 2013-05-12 00:38:47

+0

如果您繼續點擊您已經看到的答案,我認爲這不會起作用。每當您第一次點擊它們時,它們都會隱藏起來...... – jahroy 2013-05-12 00:43:12

1
$('.faq_response').click(function(){ 
    $(this).siblings().hide(); 
    $(this).toggle(); 
}) 

應該做的伎倆,但一個人必須要看到實際的標記......

+0

+1這是一個更好的方法。 – jahroy 2013-05-12 00:52:54