javascript - 尽管 CSS 位于就绪文档内,但在超时后仅显示无功能

标签 javascript jquery html

我在将 display 设置为 none 时遇到一些奇怪的行为

这是核心问题(我没有 jsfiddle,因为我无法在 jsfiddle 中重现问题)

$(document).ready(function(){
    for(var i = 0; i < 10; i++){
        jQuery('<li />')
           .attr("id", i)
           .attr("class", "toggle_test")
           .appendTo('ul');
        if (i >= 5){
            $("#".concat(i)).css("display", "none"); // doesn't work
            $("#".concat(i)).hide();                 // doesn't work
            $("#".concat(i)).css("color", "red");    // works
        }

    }
});

如您所见,将 display 设置为 none 或隐藏它在设置 css 颜色有效时不起作用,这不太有意义。

我进行了几个不同的测试。

  1. 我发现,如果我在控制台中尝试 $("#1").css("display", "none"); ,它就会起作用
  2. 如果我将 if 语句包装在另一个准备好的文档中,它仍然不起作用
  3. 如果我添加超时。

代码:

if (i < 5){
    setTimeout(function(){
        // tested selecting class or id, below shows selecting class
        jQuery(".toggle_test").css("display", "none");  // works if timeout more than 1350
        jQuery(".toggle_test").css("color", "red");  // always works
    }, 2000);
}

只有超时大于1350时才有效,我不确定问题是什么,有人能给我一些建议吗?

最佳答案

主要问题是您向 jQuery 选择器传递一个数组 Array.prototype.concat() 将一个值连接到一个数组中并返回新的修改后的数组。因此,返回类似 ['#', 1] 的值等等。

为了像您的情况一样查询元素,您只需连接迭代器值,就像通常使用字符串一样>.

 $("#" + i).css("display", "none"); 

注意: @DavidDomain 的评论中指出,您有一个拼写错误,实际上应该是 for(var i = 0; i < 10; i++) ... .

关于javascript - 尽管 CSS 位于就绪文档内,但在超时后仅显示无功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32510038/

相关文章:

javascript - jQuery:隐藏 div。单击按钮后显示该 div 并隐藏另一个 div

javascript - 如何使用 JavaScript 将下拉按钮放入 HTML 表格中?

javascript - 我正在尝试验证 jsp 登录表单,我需要字段(标签)验证而不是警报消息

java - 附加到某些 javascript 文件的非法字符

javascript - JQuery 合并两个函数 keyup 和 focusout

javascript - 文件数量计数不正确

Javascript Canvas 和 UNICODE

javascript - jQuery DataTable - 隐藏列问题

javascript - 一次点击打开 2 个页面,但不是同时打开

javascript - SyntaxHighlighter 未定义