Sweetalert: 弹出甜蜜警报时,选项卡在表单中不起作用

创建于 2015-06-27  ·  21评论  ·  资料来源: t4t5/sweetalert

我在 html 表单中使用甜蜜警报,该表单是单击按钮时弹出的,但是当我单击弹出窗口的确定按钮时,选项卡索引在此之后不起作用,我必须单击每个字段来填充它。

最有用的评论

@kosst是的,您的解决方案要好得多,因为使用来自@edwin1217的解决方案,OK 和错误消息(输入文本模式)的默认 Enter 键操作将不起作用。

这里又是什么最适合我:

(function (){
    var close = window.swal.close;
    window.swal.close = function() {
        close();
        window.onkeydown = null;
    };
})();

所有21条评论

同样的想法也发生在我身上。

是的,我也遇到过。 此外,按 Enter 键关闭弹出窗口会将焦点从页面上移除,并且您无法在不单击的情况下再次聚焦在页面上。

在 doneFunction 中删除窗口事件解决了这个问题。

swal({
  title: "Are you sure?",
  text: "You will not be able to recover this imaginary file!",
  type: "warning",
  showCancelButton: true,
  confirmButtonColor: "#DD6B55",
  confirmButtonText: "Yes, delete it!",
  closeOnConfirm: false
}, function(){

  // remove these events;
  window.onkeydown = null;
  window.onfocus = null;

  swal("Deleted!", "Your imaginary file has been deleted.", "success");
});

@fxghqc在回调中删除事件处理程序对我

+1

什么时候能解决这个问题?

+1

我可以使用这个错误的任何分支吗? 我不确定如何使用@xiaouze88的提交。
我也遇到了有关此错误的烦人问题。

这个错误仍然存​​在。 您甚至可以在主要的 Sweetalert 演示页面上看到它... http://t4t5.github.io/sweetalert/

只需单击 AJAX 示例的 Try Me 按钮,然后注意该选项卡不再有效。 我可以在调试器中看到 window.onfocus 没有被恢复为空后缀。 如果我手动设置它,那么我可以再次使用选项卡。 但是在传递给 swal() 的回调函数中将其设置为 null 对我不起作用。 我在那里将它设置为 null,但是 Sweetalert 内部的其他东西在整个过程结束之前将其设置回原位。 几秒钟后进入调试器证实了这一点。

请修复!

我也可以确认这种行为。 这是间歇性的,最好的错误类型......
我看到window.onkeydown事件即使在对话框关闭之后也被绑定到函数......甚至可能在对话框被触发之前。

我也遇到了完全相同的问题。 当 SweetAlert 弹出窗口关闭时,即使设置了tabindex ,页面表单中的选项卡也会停止工作。

明天我会做一个 PR 来解决这个问题。
在星期二,2017年1月3日21:15时,尼尔[email protected]写道:

我也遇到了完全相同的问题。 当 SweetAlert 弹出时
已关闭,即使设置了 tabindex,页面表单中的选项卡也会停止工作。


您收到此消息是因为您发表了评论。
直接回复本邮件,在GitHub上查看
https://github.com/t4t5/sweetalert/issues/391#issuecomment-270197639
或静音线程
https://github.com/notifications/unsubscribe-auth/AHWwZbRIQD1HLSs4WpN87HRyeBlvGgcuks5rOp43gaJpZM4FNSiU
.

那将非常棒@EduardJS谢谢你。

现在我在另一个线程中使用@JustinWinthers的解决方案:

(function (){

    var _swal = window.swal;

    window.swal = function(){

        var previousWindowKeyDown = window.onkeydown;

        _swal.apply(this, Array.prototype.slice.call(arguments, 0));

        window.onkeydown = previousWindowKeyDown;

    };

})();

参考资料: https :

@匿名先生
更新

var _swalclose=window.swal.close;
var _swal = window.swal;
window.swal = 函数(){
var previousWindowKeyDown = window.onkeydown;
_swal.apply(this, Array.prototype.slice.call(arguments, 0));
window.onkeydown = previousWindowKeyDown;
};
window.swal.close=function(){
_swalclose.apply(this);
};

哇! 我刚找到这个线程。 我花了几天的时间想知道为什么我的标签可以工作,然后他们却没有。 现在我意识到有时我会使用sweetalert,这就是它停止的原因!

是否有人仍在为此努力修复,目前处理它的最佳解决方案是什么?

编辑:刚刚看到上面的 sweetalert2 消息。 我不知道还有其他版本,所以我会试一试,但是要迁移还有很多工作要做!

@elasticsteve如果您注意此 repo 上的其他线程,您会注意到该线程已不再维护。

还有另一个名为SweetAlert2 的存储库,您应该真正将应用程序移植到它。

如果你仍然想使用这个版本,唯一的解决方案就是这个。 我忘了做 PR.. 没有足够的时间。 @edwin1217的解决方案是您应该采用的解决方案。

@edwin1217的解决方案几乎与我不久前在线程 #127 中发布的相同。

谢谢大家。 我试图移植到 SweetAlert2,但不得不放弃。 我无法使用closeOnConfirm: false进行简单的文本输入。 浪费了 3 个小时后,我又回来了,并会尝试上述建议。

@kosst是的,您的解决方案要好得多,因为使用来自@edwin1217的解决方案,OK 和错误消息(输入文本模式)的默认 Enter 键操作将不起作用。

这里又是什么最适合我:

(function (){
    var close = window.swal.close;
    window.swal.close = function() {
        close();
        window.onkeydown = null;
    };
})();

}

我知道这已经很长时间了,但是你能不能解释一下我如何在另一个函数中整体调用这个函数? 我应该把这个片段放在控制器的什么地方?

function(isConfirm){  //Function that triggers on user action.
        if(isConfirm){
          $scope.myData.splice(index,1);
          SweetAlert.swal("Deleted!");
        } else {
            SweetAlert.swal("Your file is safe!");
        }

改变 -
关闭确认:假
到 -
closeOnConfirm: 真

就是这样......它对我有用

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

voodoo6 picture voodoo6  ·  4评论

jamieson99 picture jamieson99  ·  3评论

mouro001 picture mouro001  ·  3评论

Lusitaniae picture Lusitaniae  ·  4评论

krishnamraju picture krishnamraju  ·  3评论