jquery 触发问题

标签 jquery css function jquery-1.3

我正在使用一个函数来均衡从数据库返回的 li 标签的高度。我还使用 jquery 根据它们在一行中的位置分配某些 li 新类。

基本上我的问题是 jquery 语句的定位部分总是有效,但等高部分有时不会触发,事实上它通常在空缓存上不起作用 - 但是它总是会在刷新或第二次访问时触发到页面。

此处为实例 Link here! (让我知道它是否适合你!)

下面列出了我使用的 jquery 代码。

    jQuery.fn.equalCols = function(){
    //Array Sorter
    var sortNumber = function(a,b){return b - a;};
    var heights = [];
    //Push each height into an array
    $(this).each(function(){
        heights.push($(this).height());
    });
    heights.sort(sortNumber);
    var maxHeight = heights[0];
    return this.each(function(){
        //Set each column to the max height
        $(this).css({'height': maxHeight});
    });
};

jQuery(document).ready(function($) {
        $(".thumbs").each(function(i) { 
        if (i % 4 == 0) 
           $(this).addClass("start");
        if (i % 4 == 3) 
           $(this).addClass("end");
    });
    $(".thumbs").each(function(i) { 
        if (i % 3 == 0) 
           $(this).addClass("start");
        if (i % 3 == 2) 
           $(this).addClass("end");
           });
    $(".event_thumbs").each(function(i) { 
        if (i % 2 == 0) 
           $(this).addClass("start");
           });
$('.thumbs, .end, .start').equalCols();
});

如果你对实现目标的代码或方法有更好的建议,请大声说出来,或者如果你知道如何让它工作 - 我爱你。

最佳答案

也许是因为在最后一个循环中没有将它包装在 jQuery 中?此外,您只需要跟踪迭代时看到的最大值。将高度放入数组中并对其进行排序似乎效率低下。

jQuery.fn.equalCols = function(){
    var maxHeight = 0;
    $(this).each(function(){
        var height = $(this).height();
        if (height && height > maxHeight) maxHeight = height;
    });

    return $(this).each(function(){
        //Set each column to the max height
        $(this).css({'height': maxHeight});
    });
};

更新:因为页面上有图片,等到文档加载完成是不够的,还需要等到图片加载完成。或者,更好的是,在加载每张图像后简单地进行均衡——这样您就可以确定在所有图像加载后都这样做。由于如果图像在应用之前加载(例如,它可能在用户的缓存中并且加载速度比 javascript 执行速度更快),则不会调用加载处理程序,因此设置一个计时器以在指定的时间后触发 equalCols 函数涵盖未为任何图像调用加载处理程序的情况的时间量。将负载处理程序留在图像上,然后如果您将源更改为图像,它将被重新应用并且页面再次均衡。

 $(function() {
     $('img').load( function() { /* equalize after every image load */
          equalize();
     });
     setTimeout( equalize, 2000 );  /* wait 2 secs, then equalize */
 });

 function equalize() {
     $('.thumbs, .end, .start').equalCols();
 }

关于jquery 触发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1468188/

相关文章:

jquery - 单击按钮时可以看到 Google 表格图表

javascript - 我通过单击创建了 div 的克隆。限制为 6 个克隆。如果我删除克隆,它会破坏限制它的代码吗?

javascript - 如何从js对象向twig模板添加变量

html - CodeMirror 填充 Div 并使 Div 100% 高度

PHP:奇怪的函数调用 function()()

javascript - 如何将键码表中的 190 字符 (.) 句号包含在允许的键中?

javascript - 如何使用 jQuery 从所有 div 中删除一个类,而不仅仅是 sibling ?

jquery - 禁用 DIV 中的所有 A(URL) 元素

javascript - 根据窗口大小动态调整div

c++ - 如何在 C++ 中使用指针翻转 Char 数组