onclick确认不在平板电脑上工作



我在列表页面上有一个删除对象链接,代码如下:

<a href='/parameters/delete' 
onclick='return confirm("Are you sure you want to delete this item?");' </a>

它在我桌面上的firefox和IE上都很好用。但它在我的平板电脑上不起作用,它的IE版本显然与台式机相同:11.0.9600.16518。H6但是,服务器日志显示桌面有

"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。但后来出了问题!

对此有什么变通办法吗?

已编辑

  1. 该设备是运行Windows 8 的HP平板电脑

  2. 我正在使用jQuery,但之前没有提到它,因为它似乎与问题无关(尽管它似乎与解决方案有关)

  3. 我似乎过于简化了这个问题,现在我已经看到了解决方案的样子。

这一切都发生在列表页面上,每个要删除(或编辑、查看或…)的项目对应一行,因此页面上有许多类似的链接。因此链接id不能用作选择器。

此外,每个项目都有另一个选项,也是不可逆的,我希望用户确认,但使用不同的消息。(注意,这个选项是幂等的)。目前,这是通过一个生成html的模板宏来处理的,并且消息被指定为模板宏的参数。因此,理想情况下,在为链接生成html时,有一种方法可以指定消息。

您应该使用.preventDefault(),而不是返回true或false。

无论如何,您确实不希望删除事件绑定到超链接,因为这些事件会发出GET请求。删除应该通过POST或DELETE进行,因为GET请求应该是幂等的,这意味着它们没有后果(它们不会更改任何内容)。要解决此问题,请使用嵌入在表单中的按钮,或者捕获请求(如您现在所做的),阻止默认操作,然后发出POST请求,如以下答案所示:JavaScript POST-request类似于表单提交。

下面是一个如何使用preventDefault的示例。

Plunker示例

相关内容

最新更新