【问题标题】:Dynamically opening an array of jquery accordions动态打开一个jQuery手风琴数组
【发布时间】:2016-05-27 04:57:32
【问题描述】:

所以我试图遍历一个手风琴 jquery 对象类,检查哪些是打开的,将它们添加到数组中,然后(在手风琴重置后)重新打开之前打开的手风琴。这似乎是一个非常简单的问题,我很抱歉,但在我的搜索中,这些问题似乎只是关于使用 jquery 进行迭代,而不是关于迭代 jquery 对象数组。我真的找不到答案。

这是我目前拥有的,由于某种原因无法正常工作。首先,创建已经打开的手风琴数组。

        $(".accordionClass").each(
            function(){
                if($(this).accordion("option", "active") !== false) {
                    activeArray.push($(this));
                }
            }
        );

这似乎有效。至少,activeArray.length 给出了正确数量的对象。

然后,在重新初始化后,我尝试打开该数组中的所有手风琴。

    $.each(activeArray,
        function(){
            $(this).accordion({ active: 0 });
        }
    );

而且没有骰子。他们不开门。有什么想法吗?

【问题讨论】:

  • 因为活动数组已经包含 jquery 对象.. 你可以这样做.accordian({active:0})。但更好的解决方案是按照建议将 DOM 对象保存到数组而不是 jQuery 对象中。希望您没有重新创建 DOM 对象?

标签: javascript jquery loops each accordion


【解决方案1】:

问题解答

在所写的问题中,您将 jQuery 对象 ($(this)) 推送到您的数组中,读取它们,然后将对象包装在另一个 jQuery 选择器中。

您应该只推送本机 DOM 对象 this


问题的解决方案

这里的具体问题(在这个答案的 cmets 中找到,而不是问题本身)是对象被销毁,然后(从相同的标记)创建了一个类似的对象。这通常是不好的做法,但也会导致问题中的问题:被推入数组的this所指的对象在被读出时已不存在。

相反,您应该推送this.id,然后使用jQuery 重新选择带有$('#'+this) 的副本。

【讨论】:

  • 还是什么都没有。我也试过其他几种打开方式,比如$(this).accordion("option","active",0);都没有结果,所以我真的不知道是什么问题。
  • 对不起,我帮不上忙;我是。尝试使用 JSON.stringify 调查对象内容。并尝试打开所有手风琴(或仅打开一个特定的手风琴)以找到打开它们的正确方法。
  • 嗯是啊。所以JSON.stringify(activeArray); 在仅使用this 填充的数组上完成时会给出[{},{},{}]。当使用$(this) 填充时,stringify 会给出[{"0":{},"context":{},"length":1},{"0":{},"context":{},"length":1},{"0":{},"context":{},"length":1}]。我必须承认,我对 JSON 或 jquery 知之甚少,无法知道这些是否符合预期或完全损坏。同时,使用$(".accordionClass").each( function(){ $(this).accordion({ active: 0 }); } ); 打开所有手风琴非常容易,所以看来问题出在数组上..
  • @king_cole 如果你能解决你的问题,我可以找出问题所在。这是一个工作小提琴的例子,但我显然使用了不同的手风琴代码:jsfiddle.net/ube5jq7w.
  • 这就是我想出的:jsfiddle.net/L5h6v358 实际脚本通过将输入发送到外部脚本然后调用主函数作为响应函数来动态创建内部手风琴(大 html 字符串)帖子调用,但我试图尽可能地保持实际结构。出于某种原因,点击功能似乎在这个小提琴上不起作用,我似乎无法弄清楚,所以很抱歉我向你展示了甚至无法正常工作的废话。我很烂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 2018-02-07
相关资源
最近更新 更多