Javascript jQuery-inArray,ID为元素-';其他';不起作用
我创建了一组问题和答案 HTML: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 = {}; 以及: 实现这一点,您可以考虑,而不是在数组< /代码
它的工作非常好,但是在“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('+');
}
}