我在列表页面上有一个删除对象链接,代码如下:
<a href='/parameters/delete'
onclick='return confirm("Are you sure you want to delete this item?");' </a>
这一切在我桌面上的firefox和IE上运行正常。但它不适用于我的平板电脑,它显然与桌面版IE相同:11.0.9600.16518。 H6wever,服务器日志显示桌面有
"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"
和平板电脑
"Mozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; rv:11.0) like Gecko"
如果在确认对话框中选择取消,则无法正常工作时会发生什么。如果在确认对话框中选择确定,则删除该对象,然后返回列表页面,闪烁一条消息,表示删除成功。
当它无法正常工作时,如果选择取消,则看起来好像没有任何反应。但是,如果您再刷新列表页面,则该对象已消失。查看服务器日志,肯定有对删除URL的请求。
我已尝试使用链接中的以下代码进行调试:
<a href='/parameters/delete' onclick='return checkMe();' </a>
并添加以下脚本:
<script language="javascript">
function checkMe() {
if (confirm("Are you sure")) {
alert("Clicked Ok");
return true;
} else {
alert("Clicked Cancel");
return false;
}
}
</script>
显然正在运行onclick脚本(好吧,我们知道因为出现了确认对话框),正在点击取消按钮,并且可能确认对话框确实返回false。但那就错了!
这有什么解决方法吗?
该设备是运行Windows 8的HP平板电脑
我正在使用jQuery,但之前没有提及它,因为它似乎与问题无关(尽管它似乎与解决方案相关)
我把问题简化了一下,看来,现在我已经看到了解决方案的样子。
这一切都发生在列表页面上,每个项目要删除(或编辑,或查看,或......),因此页面上有许多类似的链接。因此链接ID不能用作选择器。
此外,每个项目的另一个选项也是不可逆转的,我希望用户确认,但使用不同的消息。 (注意,该选项是幂等的)。目前,这是通过生成一个生成html的模板宏来处理的,并且该消息被指定为模板宏的参数。理想情况下,在为链接生成html时,有一种方法可以指定消息。
答案 0 :(得分:0)
您应该使用.preventDefault()
而不是返回true或false。
您确实不希望将删除事件绑定到超链接,因为这些事件会发出GET请求。删除应该通过POST或DELETE发生,因为GET请求应该是idempotent,这意味着它们没有后果(它们不会改变任何东西)。要解决此问题,请使用嵌入在表单中的按钮,或者捕获请求(正如您现在所做的那样),阻止默认操作,然后发出POST请求,如以下答案所示:JavaScript post request like a form submit。
答案 1 :(得分:0)
以下是如何使用preventDefault的示例。