return false; event.preventDefault不适用于1password自动提交

时间:2015-03-11 03:53:14

标签: javascript forms submit

我的网站只有一个用于登录的ajax提交方式,所以当表单直接提交时,它将返回一个json数据并刷新页面。所以我想观察提交事件并将其转换为ajax方式,但我可以不阻止自动提交,我尝试了很多方法来阻止1password自动提交提交,但失败了,所以我试着在这里得到一些帮助,非常感谢!

的javascript

$('form').submit(function(e) {
    e.preventDefault();
    return false;
});

1password扩展程序自动提交代码

var a = document.forms[0];
var b = document.createEvent('UIEvent');
b.initEvent('submit', !0, !0, window, 1);
a.dispatchEvent(b);
a.submit();
return !0;

环境

Mac专业版,包括chrome,safari,firefox

问题

  • 扩展名initEvent允许event.preventDeafault函数,但为什么它不起作用?

  • 为什么扩展中的initEvent函数有5个参数而不是3

  • 如何通过1password扩展程序停止自动提交

这是我的第一个问题,如果我犯了任何错误,请告诉我!我将非常感谢任何帮助!

添加解决方案

  • 当调用onsubmit时,使用setTimeout来停止提交action.chrome和firefox运行良好,但在safari中,此方法将卡住页面

    setTimeout(function() {
        try {
            document.execCommand('Stop');
        } catch (_error) {
            e = _error;
        }
        try {
            return window.stop();
        } catch (_error) {
            e = _error;
        }
      }, 0);
    
  • 1password扩展程序将尝试单击提交按钮,因此我只需删除表单操作属性并听取提交按钮的单击事件,它运行良好,非常感谢Arun P Johny的帮助

1 个答案:

答案 0 :(得分:0)

您可以在使用event.defaultPrevented

调用提交之前检查默认是否已被阻止
var a = document.forms[0];
var b = document.createEvent('UIEvent');
b.initEvent('submit', !0, !0, window, 1);
a.dispatchEvent(b);
if (!b.defaultPrevented) {
    a.submit();
}
return !0;

在您的情况下,您正在调度一个事件,但这与实际的提交调用无关,而且以编程方式调用提交也不会触发提交事件。所以你可以做的是通过检查上面显示的defaultPrevented属性来检查默认操作是否被阻止。

演示:Fiddle

相关问题