2016-04-14 20 views
0

Uzun, çok sayfalı bir HTML belgesinde, aynı görünen ve aynı şeyi yapan birden fazla düğme eklemek istiyorum (location.reload();). Kodu tekrarlama fikriyle, hepsinde işe yarayan tek bir onclick olayı yapmak istiyorum. Ama nasıl olduğunu anlayamıyorum.JavaScript ile birden çok düğmeyi onclick ile kullanma

<button class="reloadButton">Reload</button> gibi bir kimlik yerine, hepsi aynı .class "reloadButton" değerini vererek oynamaya çalıştım. Sonra var reload = documents.getElementsByClassName("reloadButton"); kullanmayı denedim.

Ama oradan ne yapacağımı bilmiyorum. reload.onclick = function() { location.reload(); } gibi bir şey çalışıyor gibi görünmüyor.

Onclick olayına eklendiğinde tüm dizi benzeri HTMLCollection'dan geçmek için for döngüsünü nasıl kullanacağımı bilmiyorum.

Bu sadece salt JavaScript ile ve benim uzmanlık düzeyim de saf başlangıçlıdır. Öyleyse, bunu bir akılla açıklayabiliyor olsaydınız veya bunu anlayabileceğim bir seviyeyi anlatan bir web sitesini bağlayabilirseniz çok sevinirim. Teşekkür ederim!

+0

aitjQuery veya saf javascript kullanıyor musunuz? –

+0

Bunu yinelenen olarak kapatıyorum çünkü bağlantılı soruda yanıtlanan dizi benzeri bir yapıdan nasıl geçeceğinizi soruyorsunuz. Etkinlik dinleyicileri eklemek teknik olarak ayrı bir sorudur, ancak yine birçok defa sorulan bir sorudur. – zzzzBov

+0

Hayır, aynı işlevselliği – mplungjan

cevap

3

Düz JS:

window.onload=function() { // when the page has loaded 
    var bt = document.querySelectorAll(".reloadButton"); // get all buttons with the class 
    for (var i=0;i<bt.length;i++) { // newer browsers can use forEach 
    bt[i].onclick=function() { // assign anonymous handler 
     location.reload(); 
    } 
    } 
} 

veya adlandırılmış fonksiyonu ile

function reloadPage() { 
    location.reload(); 
} 
window.onload=function() { // when the page has loaded 
    var bt = document.querySelectorAll(".reloadButton"); // get all buttons with the class 
    for (var i=0;i<bt.length;i++) { // newer browsers can use forEach 
    bt[i].onclick=reloadPage; 
    } 
} 
+0

aynı sınıfa kadar birçok düğmeye nasıl atayacağını soruyor. Teşekkürler. Birkaç soru: 1. Neden getElementsByClassName yerine querySelectorAll 2. window.onload gerekli? Onsuz denedim ve aynı zamanda çalıştı. Gerekirse merak ediyorum. – Joe

+0

1: querySelectorAll, getElementByClassName 2'den daha uyumlu ve standarttır. Eğer komut dosyanızı son düğmeden sonra sayfanın en üstüne yerleştirirseniz, window.onload gerekli değildir, aksi halde – mplungjan

+0

Ps olur: Yatağa gidiyorum – mplungjan

0

var buttons = document.querySelectorAll('.js-say-hi'); 
 
var displayBox = document.querySelector('.js-display-greeting'); 
 

 
// wire displayGreeting function to each button with .js-say-hi class 
 
for (var i=0; i<buttons.length; i++) { 
 
    buttons[i].addEventListener('click', displayGreeting) 
 
} 
 

 
function displayGreeting(event) { 
 
    var buttonNumber = event.target.textContent[event.target.textContent.length - 1]; 
 
    displayBox.textContent += 'hello from button ' + buttonNumber + '! '; 
 
}
<button class="js-say-hi">Say hi 1</button> 
 
<button class="js-say-hi">Say hi 2</button> 
 
<button class="js-say-hi">Say hi 3</button> 
 
<button class="js-say-hi">Say hi 4</button> 
 
<button class="js-say-hi">Say hi 5</button> 
 
<div class="js-display-greeting"></div>

+0

Neden ilgisiz kod ile cevap verin? Ayrıca addEventListener, eski IE'ler tarafından desteklenmez – mplungjan

0

ayrıca sadece adlandırılmış işlevini kullanabilirsiniz

ve sonra yerine

<button class="reloadButton">Reload</button> 

kullanım

<button onclick="reloadpage();">Reload</button> 
+0

Ancak, bu her düğmede satır içidir. Tavsiye edilmez – mplungjan

+0

Kullanıyorum çünkü daha okunabilir, tada bağlı. –

+0

Satır içi olay işleyicileri iyi uygulama sayılmazlar – mplungjan

İlgili konular