0

我觉得我要疯了!我正在写一组常见问题解答,但我只想一次显示一个答案......

这是我的代码...

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();
}

目前,如果我单击一个问题,则会显示响应。如果我随后单击不同的问题,则会隐藏先前的响应并出现新的响应。如果我单击答案已经显示的问题,它应该隐藏但它不做任何事情。

如果我阻止代码的循环位,则切换部分可以正常工作。

希望别人能在我没有头发之前看到我哪里出错了!

提前致谢

保罗

4

3 回答 3

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

应该可以解决问题,但是必须查看实际的标记...

于 2013-05-12T00:42:18.007 回答
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 循环中的每个元素,然后切换其中一个。

据推测,您的任何 id 都实际上不包含#符号。

于 2013-05-12T00:17:45.833 回答
0

无需循环。

你的 html 可能是:

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

然后将它们全部隐藏并显示您想要的:

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

可能是一个更好的语法,但你明白了。

于 2013-05-12T00:19:42.220 回答