Как отобразить диалоговое окно подтверждения при нажатии ссылки <a>?
Я хочу, чтобы эта ссылка имела диалоговое окно JavaScript, которое запрашивает пользователя "Вы уверены?" Y/N.
<a href="delete.php?id=22">Link</a>
Если пользователь нажимает "Да", ссылка должна загружаться, если "Нет" ничего не произойдет.
Я знаю, как это сделать в формах, используя onclick
, запускающую функцию, которая возвращает true
или false
. Но как мне это сделать с помощью ссылки <a>
?
Ответы
Ответ 1
Обработчик события Inline
В самом простом режиме вы можете использовать функцию confirm()
в встроенном обработчике onclick
.
<a href="delete.php?id=22" onclick="return confirm('Are you sure?')">Link</a>
Расширенная обработка событий
Но обычно вы хотели бы отделить свой HTML и Javascript, поэтому я предлагаю вам не использовать inline-обработчики событий, но класть класс по вашей ссылке и добавлять прослушиватель событий.
<a href="delete.php?id=22" class="confirmation">Link</a>
...
<script type="text/javascript">
var elems = document.getElementsByClassName('confirmation');
var confirmIt = function (e) {
if (!confirm('Are you sure?')) e.preventDefault();
};
for (var i = 0, l = elems.length; i < l; i++) {
elems[i].addEventListener('click', confirmIt, false);
}
</script>
Этот пример будет работать только в современных браузерах (для старых IE вы можете использовать attachEvent()
, returnValue
и предоставить реализацию для getElementsByClassName()
или использовать библиотеку, такую как jQuery, которая поможет в проблемах с несколькими браузерами). Вы можете больше узнать о этом расширенном методе обработки событий в MDN.
JQuery
Я хотел бы оставаться вдали от того, чтобы быть поклонником jQuery, но манипуляции с DOM и обработка событий - это две области, где это помогает в большей степени с различиями в браузерах. Просто для удовольствия, вот как это будет выглядеть с jQuery:
<a href="delete.php?id=22" class="confirmation">Link</a>
...
<!-- Include jQuery - see http://jquery.com -->
<script type="text/javascript">
$('.confirmation').on('click', function () {
return confirm('Are you sure?');
});
</script>
Ответ 2
Я предлагаю избегать встроенного 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;
}
};
}
JS Fiddle demo.
Вышеописанное обновление для уменьшения пространства, хотя и поддерживает ясность/функцию:
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?");
};
}
JS Fiddle demo.
Несколько запоздалое обновление, чтобы использовать addEventListener()
(как предложено bažmegakapa в комментариях ниже):
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);
}
JS Fiddle demo.
Вышеуказанное связывает функцию с событием каждой отдельной ссылки; который потенциально весьма расточителен, когда вы могли привязать обработку событий (с помощью делегирования) к элементу-предшественнику, например следующее:
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);
JS Fiddle demo.
Поскольку обработка событий привязана к элементу body
, который обычно содержит множество других элементов с возможностью клика, я использовал временную функцию (actionToFunction
), чтобы определить, что делать с этим кликом. Если щелкнутый элемент является ссылкой и поэтому имеет tagName
из a
, обработка клика передается функции reallySure()
.
Литература:
Ответ 3
<a href="delete.php?id=22" onclick = "if (! confirm('Continue?')) { return false; }">Confirm OK, then goto URL (uses onclick())</a>
Ответ 4
Этот метод немного отличается от любого из приведенных выше ответов, если вы присоединяете обработчик событий с помощью addEventListener (или attachEvent).
function myClickHandler(evt) {
var allowLink = confirm('Continue with link?');
if (!allowLink) {
evt.returnValue = false; //for older Internet Explorer
if (evt.preventDefault) {
evt.preventDefault();
}
return false;
}
}
Вы можете присоединить этот обработчик с помощью:
document.getElementById('mylinkid').addEventListener('click', myClickHandler, false);
Или для более старых версий Internet Explorer:
document.getElementById('mylinkid').attachEvent('onclick', myClickHandler);
Ответ 5
Просто для удовольствия, я собираюсь использовать одно событие во всем документе вместо добавления события ко всем тэгам привязки:
document.body.onclick = function( e ) {
// Cross-browser handling
var evt = e || window.event,
target = evt.target || evt.srcElement;
// If the element clicked is an anchor
if ( target.nodeName === 'A' ) {
// Add the confirm box
return confirm( 'Are you sure?' );
}
};
Этот метод был бы более эффективным, если бы у вас было много якорных тегов. Конечно, он становится еще более эффективным, когда вы добавляете это событие в контейнер, имеющий все теги привязки.
Ответ 6
jAplus
Вы можете сделать это без написания кода JavaScript
<head>
<script src="/path/to/jquery.js" type="text/javascript" charset="utf-8"></script>
<script src="/path/to/jquery.Aplus.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
...
<a href="delete.php?id=22" class="confirm" title="Are you sure?">Link</a>
...
</body>
Демо-страница
Ответ 7
ИСПОЛЬЗОВАНИЕ PHP, HTML и JAVASCRIPT для запроса
Просто, если кто-то ищет использование php, html и javascript в одном файле, ответ ниже работает для меня.. Я прикреплен к используемому значку bootstrap "trash" для ссылки.
<a class="btn btn-danger" href="<?php echo "delete.php?&var=$var"; ?>" onclick="return confirm('Are you sure want to delete this?');"><span class="glyphicon glyphicon-trash"></span></a>
причина, по которой я использовал php код в середине, потому что я не могу использовать его с самого начала..
код ниже не работает для меня: -
echo "<a class='btn btn-danger' href='delete.php?&var=$var' onclick='return confirm('Are you sure want to delete this?');'><span class='glyphicon glyphicon-trash'></span></a>";
и я изменил его, как в первом коде, тогда я запускаю как только то, что мне нужно. Надеюсь, что я смогу помочь кому-то в моем случае.
Ответ 8
Вы также можете попробовать следующее:
<a href="" onclick="if (confirm('Delete selected item?')){return true;}else{event.stopPropagation(); event.preventDefault();};" title="Link Title">
Link Text
</a>