2017-06-21 45 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的新版本,你可以使用。上(點擊)