我的网站只有一个用于登录的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的帮助
答案 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