Простая проблема с JavaScript: onClick подтверждает, что не предотвращает действие по умолчанию
Я делаю простую ссылку удаления с событием onClick, которое вызывает диалог подтверждения. Я хочу подтвердить, что пользователь хочет удалить запись. Однако кажется, что когда в диалоговом окне нажата кнопка "Отмена", действие по умолчанию (т.е. Ссылка href) все еще происходит, поэтому запись все равно удаляется. Не уверен, что я делаю неправильно здесь... Любой вклад будет очень оценен.
EDIT: На самом деле, как теперь код, страница даже не вызывает вызов функции... поэтому диалог вообще не появляется. У меня был код onClick как:
onClick="confirm('Delete entry?')"
который вызвал диалог, но все еще шел по ссылке на Cancel.
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt_rt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<script type="text/javascript">
function delete() {
return confirm('Delete entry?')
}
</script>
...
<tr>
<c:if test="${userIDRO}">
<td>
<a href="showSkill.htm?row=<c:out value="${skill.employeeSkillId}"/>" />
<img src="images/edit.GIF" ALT="Edit this skill." border="1"/></a>
</td>
<td>
<a href="showSkill.htm?row=<c:out value="${skill.employeeSkillId}&remove=1"/>" onClick="return delete()"/>
<img src="images/remove.GIF" ALT="Remove this skill." border="1"/></a>
</td>
</c:if>
</tr>
Ответы
Ответ 1
В вашем коде есть опечатка (тег a закрыт слишком рано).
Вы можете использовать:
<a href="whatever" onclick="return confirm('are you sure?')"><img ...></a>
Обратите внимание на return (confirm): значение, возвращаемое скриптами в встроенных evens, определяет, выполняется ли действие браузера по умолчанию или нет; в случае, если вам нужно запустить большую часть кода, вы можете, конечно, вызвать другую функцию:
<script type="text/javascript">
function confirm_delete() {
return confirm('are you sure?');
}
</script>
...
<a href="whatever" onclick="return confirm_delete()"><img ...></a>
(обратите внимание, что delete - это ключевое слово)
Для полноты: современные браузеры также поддерживают события DOM, позволяя вам регистрировать более одного обработчика для одного и того же события на каждом объекте, получать доступ к деталям события, останавливать распространение и многое другое; см. События DOM.
Ответ 2
Ну, у меня была такая же проблема, и проблема была решена путем добавления слова " return" перед подтверждением:
onclick="return confirm('Delete entry?')"
Мне жаль, что это не могло быть для вас неудобным.
Удачи!
Ответ 3
Я использую это, работает как шарм. Нет необходимости иметь какие-либо функции, просто встраиваясь со своей ссылкой.
onclick="javascript:return confirm('Are you sure you want to delete this comment?')"
Ответ 4
Использование простой ссылки для действия, такого как удаление записи, выглядит опасным для меня: что, если искатель пытается индексировать ваши страницы?
Он будет игнорировать любой javascript и следовать каждой ссылке, возможно, не очень хорошо.
Вам лучше использовать форму с методом = "POST".
И тогда у вас будет событие "OnSubmit", чтобы сделать именно то, что вы хотите...
Ответ 5
У меня была проблема одинаково (нажмите на кнопку, но после того, как ее отменили, она по-прежнему удаляет мой объект), поэтому сделал это таким образом, надеюсь, что это поможет кому-то в будущем:
$('.deleteObject').click(function () {
var url = this.href;
var confirmText = "Are you sure you want to delete this object?";
if(confirm(confirmText)) {
$.ajax({
type:"POST",
url:url,
success:function () {
// Here goes something...
},
});
}
return false;
});
Ответ 6
Прежде всего, удалить зарезервированное слово в javascript, я удивлен, что это даже выполняется для вы (когда я тестирую его в Firefox, я получаю синтаксическую ошибку)
Во-вторых, ваш HTML выглядит странно - есть ли причина, по которой вы закрываете открывающие теги привязки />
вместо >
?
Ответ 7
<img src="images/delete.png" onclick="return confirm_delete('Are you sure?')">
<script type="text/javascript">
function confirm_delete(question) {
if(confirm(question)){
alert("Action to delete");
}else{
return false;
}
}
</script>
Ответ 8
Если вы хотите использовать небольшие встроенные команды в теге onclick, вы можете пойти с чем-то вроде этого.
<button id="" class="delete" onclick="javascript:if(confirm('Are you sure you want to delete this entry?')){jQuery(this).parent().remove(); return false;}" type="button">
Delete
</button>
Ответ 9
попробуйте следующее:
OnClientClick = 'return (подтвердить ( "Вы уверены, что хотите удалить этот комментарий?" ));'
Ответ 10
У меня была проблема с IE7 и возврат false раньше.
Проверьте мой ответ на другую проблему: Javascript не работает в IE