【问题标题】:jQuery hide() flickerjQuery hide() 闪烁
【发布时间】:2012-05-18 17:47:01
【问题描述】:

我有一个 PHP 脚本,它在带有一些输入的表单上运行验证。我想在页面重新加载后隐藏()错误然后让它们淡入(而不是只出现)。

我遇到的问题是,尽管脚本可以运行...当页面加载时,错误字段会轻微闪烁。

<div class="error">sample error</div>

$(document).ready(function() 
{
    if($('div.error').length > 0)

    {

       $('div.error').hide();

        if($('div.error:hidden'))
        {
            $('div.error').delay('1000').fadeIn('2000');   
        }

    }
}

提前致谢

【问题讨论】:

  • 大部分代码实际上是不需要的。由于您隐藏了 div,因此无需检查它是否隐藏,如果 div 可见,fadeIn() 将不执行任何操作。使用内置 jQuery 函数时也不需要检查元素是否存在,尽管这是一个很好的实践。

标签: php jquery hide flicker


【解决方案1】:

你的错误框在页面加载之前隐藏了吗?

查看您的代码,它会出现,然后在文档准备好时被 JavaScript 隐藏,然后淡入。

我建议您在错误字段中添加一个名为 hidden 的类,并在样式表中将其声明为 .hidden{ display:none;}

然后把你的js改成这样:

$(document).ready(function() 
{
    if($('div.error').length > 0)

    {

       $('div.error').hide().removeClass('hidden');

        if($('div.error:hidden'))
        {
            $('div.error').delay('1000').fadeIn('2000');   
        }

    }
}

【讨论】:

  • 这个解决方案不是只依赖于javascript吗?对于没有 javascript 的人,我不想直接在样式表中隐藏字段。
  • 是的,这确实是消除闪烁的唯一方法
  • 对于错误,我认为没有 JS 的更好的行为是在页面加载时显示错误并可​​能在一段时间后淡出
  • 一个可能的解决方案是做 Modernizr 做的事情。他们将class="no-js" 添加到HTML 标记中,然后使用javascript(不是在onload 上,而是在它可用时)来删除它。然后,您可以使用 CSS 来处理两者。即 .error { 显示:无; } .no-js .error { 显示:块; } 这样,如果没有可用的 javascript,它会优雅地降级。
猜你喜欢
  • 2010-12-21
  • 2012-02-19
  • 2011-09-02
  • 2012-08-22
  • 2013-02-11
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
相关资源
最近更新 更多