Javascript jQuery-inArray,ID为元素-';其他';不起作用

Javascript jQuery-inArray,ID为元素-';其他';不起作用,javascript,jquery,if-statement,slideup,Javascript,Jquery,If Statement,Slideup,我创建了一组问题和答案 HTML: 它的工作非常好,但是在“ShowFAQ”中不执行“else”中的代码。我知道这是“$.inArray”的问题。我不想手动打印出ID元素。如何修复此问题?问题在于您正在使用数组,但参数是字符串,而不是索引 发生的情况是,您正在通过执行faq\u arr[el]=0向数组添加属性。不幸的是,$.inArray只检查数组的索引,属性被忽略 使用对象而不是使用数组。简单地做: var faq_arr = {}; 以及: 实现这一点,您可以考虑,而不是在数组< /代码

我创建了一组问题和答案

HTML:


它的工作非常好,但是在“ShowFAQ”中不执行“else”中的代码。我知道这是“$.inArray”的问题。我不想手动打印出ID元素。如何修复此问题?

问题在于您正在使用数组,但参数是字符串,而不是索引

发生的情况是,您正在通过执行
faq\u arr[el]=0向数组添加属性。不幸的是,
$.inArray
只检查数组的索引,属性被忽略

使用对象而不是使用数组。简单地做:

var faq_arr = {};
以及:


实现这一点,您可以考虑,而不是在<代码>数组< /代码>中存储<强>状态> /强>,以使用<代码> .DATA()>代码>来存储<强>状态>强> >显示> <代码>或<代码>隐藏< /代码>,更容易维护和理解。

$('.answer').hide();
$('.question')。单击(函数(){
ShowFAQ(“#”+$(this.parent().attr(“id”));
});
函数ShowFAQ(el){
变量$el=$(el);
var show=$el.data('show');//获取当前状态
如果(!show){
$(el+')。答案:first')。slideDown();
$(el+'.qshow:first').text('-');
}否则{
$(el+')。答案:first')。slideUp();
$(el+'.qshow:first').text('+');
}
$el.data('show',!show);//设置oposite以获得显示/隐藏效果
}

Theard+ 问题?

+

答复


您的代码不起作用的原因是

$.inArray(el, faq_arr)
检查
el
fay_arr
值,但需要检查键。我建议:

if(faq_arr[el] === undefined)

或者看看


<>编辑:<强>卡尔和安德烈加冈的答案同样值得一读,因为你应该考虑使用非数字键的对象而不是数组。它也适用于数组,在技术上也很好,但我很确定这被认为是非常糟糕的做法

您将
var faq\u arr=[]
定义为数组,但在这里使用它作为带有键/值的对象。因此,
$.inArray
将在这里失败。在JS中,向数组添加成员实际上是非常好的。@Siguza,是的,但是
inArray
失败。是的,但因为它检查值而不是键,而不是因为键没有设置。@Siguza是的,我知道,这就是我在回答中说的;)“$.inArray只检查数组的索引,属性被忽略。”还要注意,我从未说过将属性设置为数组是错误的!“但至少我认为这是一个很糟糕的练习。”别担心,你并不孤单。您可以将其更改为“但这是一种相当糟糕的做法。”
var faq_arr = [];
function ShowFAQ(el)
{    
    if($.inArray(el, faq_arr) == -1) { 
        $(el + ' .answer:first' ).slideDown(); faq_arr.push(el); $(el + ' .qshow:first').text('-'); 
    }
    else { 
        $(el + ' .answer:first').slideUp(); faq_arr[el] = 0; $(el + ' .qshow:first').text('+'); 
    }
}
$.inArray(el, faq_arr)
if(faq_arr[el] === undefined)
if(typeof faq_arr[el] === 'undefined')
var faq_arr = [];
function ShowFAQ(el)
{    
    if($.inArray(el, faq_arr) == -1) { 
        $(el + ' .answer:first' ).slideDown(); faq_arr.push(el); $(el + ' .qshow:first').text('-'); 
    }
    else { 
        $(el + ' .answer:first').slideUp(); faq_arr[el] = 0; $(el + ' .qshow:first').text('+'); 
    }
}