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

kaf*_*hau 40 html javascript

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

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

onClick="confirm('Delete entry?')"
Run Code Online (Sandbox Code Playgroud)

这确实带来了一个对话框,但仍然是取消取消的链接.

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

Luc*_*nti 120

你的代码中有一个拼写错误(标签a太早关闭).你可以使用:

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

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

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

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

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

  • `onClick="return confirm('你确定要删除吗?')"` (2认同)

小智 24

好吧,我曾经遇到过同样的问题,在确认之前添加" return " 这个词就解决了问题:

onclick="return confirm('Delete entry?')"
Run Code Online (Sandbox Code Playgroud)

我希望这可能对你有益.

祝好运!


Ste*_*rov 10

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

onclick="javascript:return confirm('Are you sure you want to delete this comment?')"
Run Code Online (Sandbox Code Playgroud)


Gyt*_*tis 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;
});
Run Code Online (Sandbox Code Playgroud)


siu*_*nin 7

使用简单的链接进行操作(例如删除记录)对我来说很危险:如果爬虫试图索引您的页面会怎么样?它将忽略任何JavaScript并关注每个链接,可能不是一件好事.

你最好使用method ="POST"的表单.

然后你将有一个"OnSubmit"活动来完成你想要的......

  • 这是一个很好的观点.它不仅对您的应用程序有潜在危险,而且实际上违反了HTTP规范. (4认同)

Pet*_*ley 5

首先,delete是javascript 中的保留字,我很惊讶它竟然会为你执行(当我在 Firefox 中测试它时,我收到语法错误)

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