在Safari中自动关注javascript对话框?

时间:2010-12-13 14:12:02

标签: javascript safari

是的,在我进行了一些进一步的测试之后,我已经编辑了这篇文章,我的原始帖子在下面,但是,现在这是问题的关键。

我在页面上有3个图像,当单击一个javascript窗口时,会显示确认对话框,要求用户确认他们的选择。但是,由于图像在页面上的定位,对话框出现在图像上,当尝试单击“确定”或“取消”时,似乎没有任何内容发生。然而,实际发生的是另一个确认出现在原始的顶部,并且这继续。但是,如果我点击没有图像的按钮上的某个位置,那么它可以工作,但只有在双击之后。

我发现当显示对话框时,它不会自动获得焦点,因此您必须单击它才能对焦,然后再次单击该按钮关闭对话框。如果在第一次单击时单击后面有图像的按钮部分(或对话框本身),则实际单击该图像,因为对话框没有焦点。但是,如果单击对话框中没有图像的任何位置(因此专注于对话框),则单击“确定”或“取消”,它可以工作(即使“确定”或“取消”按钮后面有图像)。

所以我需要知道的是,有没有一种方法可以在打开时自动聚焦对话框,从而避免双击?或者这只是一个狩猎bug,我必须找到另一种方法。

--------原帖---------

我的网站上有一系列图片和链接。单击图像或链接时,将显示一个window.confirm对话框,询问用户是否确定要执行操作。

在IE,Opera和Firefox中,这很好用。

然而,在Safari中,当我单击对话框上的“确定”或“取消”按钮时,实际上单击了按钮后面的页面上的任何内容,而不是对话框本身中的按钮。该对话框实际上显示“你确定要投票支持xyz”,其中xyz基于点击的图像或链接 - 当我单击确定或在对话框中取消时,文本将更改为后面的任何图像/链接确定/取消按钮。

有没有人看过这个bug,和/或知道解决方法?

更新

我一直在努力缩小范围,并且刚刚找到问题所在。

我发现如果单击按钮后面没有图像的部分(每个图像实际上是一个.NET ImageButton),那么它可以工作(虽然它需要双击)。如果我单击其后面有图像的按钮的一部分,则会打开另一个警报/确认对话框。我已经放了一些JQuery,在其中为每个图像添加一个click事件,点击它时隐藏图像,然后显示对话框,对话框工作正常。

显然这不是我要求的(不是真的希望图像消失),但它缩小了它。有什么想法可以解决这个问题吗?

另一个更新:我认为实际上警报/确认对话框最初没有获得焦点,因此需要双击。如果我单击对话框(图像不在后面的任何地方),然后单击“确定”(即使该按钮后面有图像),然后它也能正常工作。那么,如何在对话框打开后自动将其集中在对话框上?

4 个答案:

答案 0 :(得分:1)

我自己也碰到了这个问题但尚未找到答案,但我想我会发布我观察到的事情,看看它们是否与你相同。

您说必须先单击对话框才能将焦点对准它。我发现你只需要在Safari中的任何地方点击,甚至不在对话框中点击,对话框就会开始工作。此外,它似乎不是一个焦点问题,因为对话框的键盘控制仍然有效,空间选择确定,或选项卡和空格选择取消。你能证实一下吗?

您运行的是哪个版本的Safari以及Windows的哪个版本?我正在运行Windows 7,Safari 5.0.3(7533.19.4)。我也会尝试在Mac上测试这个,或者你可以在方便的时候进行测试。

在Windows 7按钮中,即使鼠标位于没有焦点的窗口中,也会突出显示鼠标。 Safari中的这个问题会在按钮中引起一些有趣的反应。当对话框首次弹出时,页面上的按钮仍然在鼠标悬停时突出显示,但对话框中的按钮却没有。在Safari中单击后,对话框中的“取消”按钮在鼠标悬停时突出显示,但页面上的按钮没有,而对话框中的“确定”按钮则没有。但是,如果不是单击Safari,而是通过单击对话框高亮显示的两个按钮而不是单击某个其他应用程序,而页面上的按钮则不会。当Safari重新获得焦点时,会出现更多不一致的行为。如果通过对话框中的单击重新获得焦点,则对话框中的按钮都会突出显示。如果通过单击而不是在对话框中重新获得焦点,则只有“取消”按钮突出显示,而不是“确定”按钮。

如果使用鼠标转移焦点,那就是全部。当通过Alt-Tabbing转移焦点时,会有不同的行为。在这种情况下,当第一次给出不同的应用程序焦点时,按钮保持原样,页面上的按钮突出显示,而对话框中的按钮则没有。如果Safari是Alt-Tabbed,就好像什么也没发生过,你仍然需要点击才能使对话框正常工作。如果在任何地方点击Safari,或者在对话框中,对话框中的两个按钮都会突出显示,而页面上的按钮则不会。

按钮的不一致行为可以在Safari的其他地方找到。 “打印”和“保存”菜单项会显示Windows默认对话框,因此这些按钮的行为与Windows一致。特定于Safari的对话框,如Javascript确认,自定义工具栏...和报告错误到Apple ...具有不同大小的按钮。此外,“自定义工具栏”中的“完成”按钮是默认按钮,但在单击对话框之前不会突出显示。报告错误中的“提交”按钮是默认按钮,在鼠标悬停时突出显示而不单击对话框,但在鼠标悬停之前不显示蓝色圆圈表示它是默认按钮。

当然,所有这一切都是我所经历的,所以对你来说可能并不相同。此时,由于行为如此不一致,我认为这是Safari中的一个错误,但我会进一步调查。

答案 1 :(得分:1)

我正准备自己报告一个错误。我有一个确认对话框,请求是或否从图库中删除图像。这种情况在弹出窗口中执行。无论是单击OK为true还是取消为false,操作都会关闭弹出窗口,就是这样! 正如前一篇文章中所提到的,如果我走出对话并清除任何调用javascript并点击弹出窗口中其他位置的链接,图像或事物,请返回对话框,对话按钮可以正常工作。这似乎是一个焦点问题。对话框似乎也是透明的,点击它上面的任何地方都会影响它下面的任何地方,就像我的情况一样,我有点击时调用函数的图像。

答案 2 :(得分:1)

我也遇到过这个问题,这就是我解决问题的方法。

setTimeout(function() {
    var confirm = confirm("Are you sure you want to send it?");
    if(confirm) {
        // do stuff here
    } else {
        // do stuff here
    }
},10);

这是一个非常不方便的解决方案,但至少它没有大的改动,也适用于其他浏览器。

答案 3 :(得分:0)

根据我的经验,实际发生的事情是鼠标点击进入对话框,就好像它根本不存在一样。如果背后的内容恰好是启动对话框的按钮,则会在一个对话框的循环中卡在另一个对话框中。我知道这在我的代码中没有任何意义,因为在其他网站上也会发生同样的效果。这只是Windows上没有Mac的错误。我在Windows XP上使用Safari 5.0.3。