1

不知道如何命名,但问题是......我有一些 jQuery 行可以正常工作,它们在页面加载时首先被激活,然后在 div 内单击时被激活。

我现在正试图让相同的代码按时间间隔运行,但它根本不起作用,也没有输出任何错误......

任何想法?该网站建立在 WordPress 之上,脚本运行在图片“幻灯片”上,您可以在http://demo.lavenderwp.com/nowland/上查看

我用于时间间隔的代码是:

setInterval("myFunc()",100);

function myFunc()
{
$('#slider, .leftNav, .rightNav, .bottomNav').click(function()
        {
            $(".contentHolderUnit").filter(function(i, el) 
            {
                    return el.style.zIndex <= 100;
                }).find('img').wrap('<div class="blue" />') .css({opacity: 0.75, border: "0px white solid"});

            $(".contentHolderUnit").filter(function(i, el) 
            {
                    return el.style.zIndex <= 100;
                }).find('div.car').css({display: "none"});

            $(".contentHolderUnit").filter(function(i, el) 
            {
                    return el.style.zIndex >= 100;
                }).find('img').css("background-color","") .css({opacity: 1, border: "15px white solid"});

            $(".contentHolderUnit").filter(function(i, el) 
            {
                    return el.style.zIndex >= 100;
                }).find('div.car').css({display: "block"});
        });
}
4

5 回答 5

2

将您的setInterval(以及任何与 jQuery 相关的代码)放入其中,$(function(){ });以便仅在加载文档时启动。正如@tymeJV 指出的那样,您应该传递不带括号的函数。

另外,您确实意识到间隔时间以毫秒为单位?你myFunc每秒跑 10 次。您也不需要重新绑定click事件。只需执行一次,就可以了。

于 2013-06-06T16:04:27.153 回答
1

答案是:不要这样做!

为什么你一秒钟重复附加点击事件监听器十次?!?这将很快耗尽内存,除非 jQuery 足够聪明,只附加一次。

您应该只需要附加一次点击事件。如果您这样做的原因是您附加侦听器的 DOM 元素在幻灯片放映期间被替换,那么请改用事件委托。

或者,如果问题仅仅是在第一次加载页面时没有附加事件侦听器,那么正如其他人建议的那样,使用$(document).ready(myFunc);or $(myFunc);

显示更多您的代码 - 特别是相关的 HTML - 并且有人可以提供更具体的建议。

更详细地查看您myInit的代码,该函数中的代码有一些重复,最好删除,而且还有一个错误。如果您的一个元素的 az-index正好为 100,会发生什么?它通过了所有.filter()测试。而且缩进有点混乱。

这是一个如何清理该代码的示例:

function myFunc() {
    $('#slider, .leftNav, .rightNav, .bottomNav').click(function() {

        var $all = $(".contentHolderUnit");
        var $lower = $all.filter(function(i, el) {
            return el.style.zIndex <= 100;  // or should it be < 100 ?
        });
        var $upper = $all.not( $lower );

        $lower.find('img').wrap('<div class="blue" />').css({
            opacity: 0.75,
            border: "0px white solid"
        });

        $lower.find('div.car').css({
            display: "none"
        });

        $upper.find('img').css({
            backgroundColor: "",
            opacity: 1,
            border: "15px white solid"
        });

        $upper.find('div.car').css({
            display: "block"
        });
    });
}
于 2013-06-06T16:07:29.420 回答
0

了不起的家伙!搞定了,非常感谢!

最终代码是:

jQuery(function(){
setInterval(myFunc,100);
});

function myFunc()
{
jQuery(".contentHolderUnit").filter(function(i, el) 
            {
                    return el.style.zIndex <= 100;
                }).find('img').wrap('<div class="blue" />') .css({opacity: 0.75, border: "0px white solid"});

            jQuery(".contentHolderUnit").filter(function(i, el) 
            {
                    return el.style.zIndex <= 100;
                }).find('div.car').css({display: "none"});

            jQuery(".contentHolderUnit").filter(function(i, el) 
            {
                    return el.style.zIndex >= 100;
                }).find('img').css("background-color","") .css({opacity: 1, border: "15px white solid"});

            jQuery(".contentHolderUnit").filter(function(i, el) 
            {
                    return el.style.zIndex >= 100;
                }).find('div.car').css({display: "block"});
        }
于 2013-06-07T03:36:25.047 回答
0

删除函数周围的引号以及()

setInterval(myFunc , 100);

此外,请务必在 DOM 准备好后包含此功能。

于 2013-06-06T16:05:13.847 回答
0

我相信你可能想把你的代码包装在$(document).ready()

你可以在这里阅读更多关于它的信息: http ://learn.jquery.com/using-jquery-core/document-ready/

希望这会有所帮助。

于 2013-06-06T16:07:07.640 回答