Простая проблема с 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