如果我们更改功能顺序,为什么这段代码不起作用?

时间:2013-07-29 07:43:28

标签: jquery

如果我有这样的代码,滑块将不会滑动:

var $root = $('html, body');
$('.main-menu a').each(function () {
    // capture the offset on init not click
    var that = $(this),
        offset = $(that.attr('href')).offset().top - $('nav.main-menu').height() + 1;
    // then use that offset, so we are not querying for id on each click
    that.click(function () {
        $root.animate({
            scrollTop: offset
        }, 2000);
    });
});

$('.cycle-container').each(function () {
    $(this).cycle({
        fx: 'scrollLeft',
        speed: 'slow',
        timeout: 0,
        next: this
    });
});

如果我改成它:它有效。 :■

$('.cycle-container').each(function () {
    $(this).cycle({
        fx: 'scrollLeft',
        speed: 'slow',
        timeout: 0,
        next: this
    });
});

var $root = $('html, body');
$('.main-menu a').each(function () {
    // capture the offset on init not click
    var that = $(this),
        offset = $(that.attr('href')).offset().top - $('nav.main-menu').height() + 1;
    // then use that offset, so we are not querying for id on each click
    that.click(function () {
        $root.animate({
            scrollTop: offset
        }, 2000);
    });
});

我是js的新手。我刚刚切换订单。任何理由或想法为什么这个命令会使代码工作,而第一个命令却没有?

通过不起作用,我的意思是,我点击滑块,它不会滑动。

我转到 firebug ,点击控制台,然后点击全部,我看到了:

TypeError: d.detachEvent is not a function
[Break On This Error]   

if ( event.target.nodeType === 3 ) {

"CSS Usage: initializing extensions" TypeError: $(...).offset(...) is undefined [Break On This Error]   

return event.result;

第一个,由jquery1.9.1本人返回,但我没有碰它。

html结构:

<div class="cycle-container">
    <div id="row-slide2">
        <section id="slide2">
             <h1>bla bla</h1>

            <p>ble ble ble</p>
        </section>
    </div>
    <div id="row-slide2-1">
        <section id="slide2-1">
             <h1>bli bli</h1>

            <div class="table">
                <div class="column">
                     <h2>blo blo</h2>

                    <p>blu blu</p>
                </div>
            </div>
        </section>
    </div>
</div>

Jquery 1.9.1;

Waypoints插件;

循环插件;

更新 如果我将代码更改为:

var that   = $(this);
var offset = $(that.attr('href')).offset().top-$('nav.main-menu').height()+1;

而不是:

var that   = $(this),
    offset = $(that.attr('href')).offset().top-$('nav.main-menu').height()+1;

实际上,在处理任何一个订单。 :S

唯一的问题是,代码现在会产生不希望的眨眼。 并且,在控制台上仍会出现此错误:

TypeError: $(...).offset(...) is undefined
[Break On This Error]   

var offset = $(that.attr('href')).offset().top-$('nav.main-menu').height()+1;

请相应检查jsfiddle: http://jsfiddle.net/talofo/Hq9NL/2/

关于这个小提琴的说明: 小提琴或多或少代表我的本地代码。但是,从一开始,本地代码顺序确实很重要,并且在小提琴上它永远不重要,它始终有效。

1 个答案:

答案 0 :(得分:1)

我最终放弃了所有偏移的东西:

我刚刚做了:

var $root = $('html, body');

$('.main-menu a').click(function() {
 $root.animate({
  scrollTop: $($(this).attr('href')).offset().top-$('nav.main-menu').height()+1
 }, 2000
);

return false;
});

并改变了html结构。 所以,现在设置了onclick。

我的航点调用改为:

$('#container>div').each(function()

感谢您抽出宝贵时间。抱歉这么具体。我会保留这个,因为,出于某种原因,有人可能会发现它很有用,并且,在我看来,订单问题可能依赖于控制台错误或糟糕的html结构。