Sugeruję unikanie wbudowanego JavaScript:
var aElems = document.getElementsByTagName('a');
for (var i = 0, len = aElems.length; i < len; i++) {
aElems[i].onclick = function() {
var check = confirm("Are you sure you want to leave?");
if (check == true) {
return true;
}
else {
return false;
}
};
}
Demo JS Fiddle .
Powyżej zaktualizowano, aby zmniejszyć przestrzeń, ale zachowując przejrzystość / funkcję:
var aElems = document.getElementsByTagName('a');
for (var i = 0, len = aElems.length; i < len; i++) {
aElems[i].onclick = function() {
return confirm("Are you sure you want to leave?");
};
}
Demo JS Fiddle .
Trochę spóźniona aktualizacja, do użycia addEventListener()
(jak sugeruje bažmegakapa , w komentarzach poniżej):
function reallySure (event) {
var message = 'Are you sure about that?';
action = confirm(message) ? true : event.preventDefault();
}
var aElems = document.getElementsByTagName('a');
for (var i = 0, len = aElems.length; i < len; i++) {
aElems[i].addEventListener('click', reallySure);
}
Demo JS Fiddle .
Powyższe wiąże funkcję ze zdarzeniem każdego pojedynczego łącza; co jest potencjalnie dość marnotrawstwem, gdy można powiązać obsługę zdarzeń (przy użyciu delegowania) z elementem nadrzędnym, takim jak:
function reallySure (event) {
var message = 'Are you sure about that?';
action = confirm(message) ? true : event.preventDefault();
}
function actionToFunction (event) {
switch (event.target.tagName.toLowerCase()) {
case 'a' :
reallySure(event);
break;
default:
break;
}
}
document.body.addEventListener('click', actionToFunction);
Demo JS Fiddle .
Ponieważ obsługa zdarzeń jest dołączona do body
elementu, który zwykle zawiera wiele innych, klikalnych elementów, użyłem funkcji tymczasowej ( actionToFunction
) w celu ustalenia, co zrobić z tym kliknięciem. Jeśli element klikany jest link, a zatem ma tagName
z a
, click-manipulacja jest przekazywany do reallySure()
funkcji.
Bibliografia: