为什么在未调用jQuery toggle()时执行

时间:2019-01-30 18:27:41

标签: jquery toggle

我正在使用Ajax创建表,一些可见的列,有些不可见。

我知道有很多做事的方法,下面是我的工作方式。

以下代码中的“ 17”表示需要可选列时来自cookie集的一个值。在表的初始加载中,将读取cookie,并打开cookie中列出的所有列。这部分的工作就好了。

任何编辑给Ajax表使表的刷新其恢复原来的状态,隐藏列17,这意味着该Cookie必须再次引用,以确定用户想要看什么,并且列是再次切换。这部分效果不佳。在表加载时,一切正常,在第一次刷新表以及随后进行的所有表刷新时,在第一次刷新将其关闭后,我都无法获得列17的切换。

据我所知,不管列17的当前可见状态如何,都在发生toggle()。 这是我用来测试和切换的代码。

if (sh == '17') { 
  if ($(".toggleCNTY").is(':visible' )) {
    // 'true' So do Nothing because this its already visible
  } else if (!$(".toggleCNTY").is(':visible' )) { 
    // 'false' So toggle it to be visible
    $(".toggleCNTY").toggle();  
  }
}

尽管我可以确认的是,代码只进入各的,如果和其他的循环,因为它应该在当列已经是可见的另一切换发生在年底。

有人看到原因吗?

1 个答案:

答案 0 :(得分:1)

首先,我建议您简化代码,删除不必要的逻辑,例如:

if (sh === '17' && !$(".toggleCNTY").is(':visible')) {
    $(".toggleCNTY").toggle();
}

尽管我不认为这会单独解决您的问题。您可以在浏览器控制台中检查元素的显示属性。似乎函数is('visible')总是返回false。如果是这样,您可以测试元素的可见性或显示并在逻辑中使用它:

const isCNTYHidden = $(".toggleCNTY").css('visibility') === 'hidden' || $(".toggleCNTY").css('display') === 'none';

if (sh === '17' && isCNTYHidden) {
    $(".toggleCNTY").toggle();
}