onclick确认无法在平板电脑上工作

时间:2014-03-02 17:37:46

标签: javascript internet-explorer tablet

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

<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。但那就错了!

这有什么解决方法吗?

被修改

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

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

  3. 我把问题简化了一下,看来,现在我已经看到了解决方案的样子。

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

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

2 个答案:

答案 0 :(得分:0)

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

您确实不希望将删除事件绑定到超链接,因为这些事件会发出GET请求。删除应该通过POST或DELETE发生,因为GET请求应该是idempotent,这意味着它们没有后果(它们不会改变任何东西)。要解决此问题,请使用嵌入在表单中的按钮,或者捕获请求(正如您现在所做的那样),阻止默认操作,然后发出POST请求,如以下答案所示:JavaScript post request like a form submit

答案 1 :(得分:0)

以下是如何使用preventDefault的示例。

Plunker example

相关问题