2017-06-21 84 views
1

这里是我的javascript:添加点击监听器的jQuery对象的数组

function scrollTo(position) { 
    $('body').animate({ 
     scrollTop: position 
    }, 500); 
} 

var titles = $('.title'); 
for(var i = 0; i < titles.length; i++) { 
    titles[i].click(function() { 
     console.log('click'); 
     scrollTo(0); 
    }); 
} 

这应该选择所有三个冠军,并应用一个点击监听器,将滚动页面重回巅峰。不幸的是,我没有在控制台中收到消息,也没有滚动。

我在网上看到的每个地方都给出了完全像这样的循环,以将点击侦听器应用于多个JQuery对象,但由于某些原因,它不适用于我。恐怕我犯了一个愚蠢的错误,但我找不到它。

+0

你需要'$(标题[1])点击(...);'为了工作。或'titles.eq(i).click(...)' –

+0

'titles [i]'返回一个DOM对象 – epascarello

回答

3

你的代码没有工作的原因是因为这条线

titles[i].click(function() { 

的当您访问jQuery对象与索引,那么在技术上访问DOM元素,而不是jQuery对象了。而DOM对象没有click方法。如果你打开你的控制台,你会看到一个错误。如果您仍想使用for循环,则必须先将其转换为jQuery对象。

$(titles[i]).click(function() { 

如果你会这样做,它会按预期工作。

此外,如果您仍然不想双重包装它,也可以使用.eq从数组中获取jQuery对象。

titles.eq(i).click(function() { 

您无需遍历jQuery对象来分配事件处理程序。你可以在一行中完成。

$('.title').click(function() { 
    console.log('click'); 
    scrollTo(0); 
}); 

另外,请检查您正在使用jQuery的版本,如果它是最新的,那么你可以使用on

$('.title').on('click', function() { 

你也需要确保与title类的元素存在于当你关联这些事件的时候。

+0

This works thank you!为什么我这样做的方式不起作用?我以前在单个JQuery对象上使用过.click()。 –

+0

@SamuelCole。检查编辑过的文章:) –

1

你可以使用这个,应该给你你想要的。

$('.title').click(function() { 
    $('body,html').animate({ 
     scrollTop: 0 
    }, 600); 
    return false; 
}); 

也为舒尚特说,如果你有jQuery的新版本,你可以使用。上(点击)