简单的JavaScript问题:onClick确认不会阻止默认操作

时间:2008-12-02 21:27:16

标签: javascript html

我正在使用带有确认对话框的onClick事件创建一个简单的删除链接。我想确认用户想要删除条目。但是,似乎在对话框中单击“取消”时,默认操作(即href链接)仍在进行,因此该条目仍会被删除。不知道我在这里做错了什么......任何输入都会非常感激。

编辑:实际上,代码现在的方式,页面甚至没有调用函数...所以,根本没有对话框出现。我确实将onClick代码作为:

onClick="confirm('Delete entry?')"

确实显示了一个对话框,但仍然是取消取消的链接。

<%@ 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>

10 个答案:

答案 0 :(得分:114)

您的代码中存在拼写错误(标签 a 过早关闭)。 您可以使用:

<a href="whatever" onclick="return confirm('are you sure?')"><img ...></a>

请注意返回(确认):内部均衡中脚本返回的值决定是否运行默认浏览器操作;如果您需要运行大量代码,您当然可以调用另一个函数:

<script type="text/javascript">
function confirm_delete() {
  return confirm('are you sure?');
}
</script>
...
<a href="whatever" onclick="return confirm_delete()"><img ...></a>

(请注意,删除是关键字)

为了完整性:现代浏览器还支持DOM事件,允许您为每个对象上的同一事件注册多个处理程序,访问事件的详细信息,停止传播等等;见DOM Events

答案 1 :(得分:21)

好吧,我曾经遇到同样的问题,在确认之前加上“返回”这个词就解决了问题:

onclick="return confirm('Delete entry?')"

我希望这可能对你有益......

祝你好运!

答案 2 :(得分:10)

我用它,就像一个魅力。无需任何功能,只需与您的链接内联

onclick="javascript:return confirm('Are you sure you want to delete this comment?')"

答案 3 :(得分:8)

我有类似问题(点击按钮,但取消后点击它仍然删除我的对象),所以这样做了,希望它有助于将来的人:

 $('.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;
});

答案 4 :(得分:7)

使用简单的链接执行操作(例如删除记录)对我来说很危险:如果抓取工具正在尝试索引您的网页该怎么办? 它将忽略任何javascript并关注每个链接,可能不是一件好事。

您最好使用method =“POST”的表单。

然后你会有一个“OnSubmit”事件来完成你想要的......

答案 5 :(得分:4)

首先,删除是javascript中的reserved word,我很惊讶这甚至为您执行(当我在Firefox中测试时,我收到语法错误)

其次,您的HTML看起来很奇怪 - 您是否有理由使用/>关闭开始的锚标记,而不只是>

答案 6 :(得分:4)

<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>

答案 7 :(得分:1)

如果你想在onc​​lick标签中使用小内联命令,你可以使用类似的东西。

<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>

答案 8 :(得分:0)

试试这个:

OnClientClick ='return(确认(“您确定要删除此评论吗?”));'

答案 9 :(得分:-1)

我遇到了IE7的问题并且之前返回了false。

在此处查看我的答案另一个问题:Javascript not running on IE