Javascript HTML JS注入表单提交
我有一个应用程序,它为提交注入了一个html事件监听器。我们想做一点验证,然后调用原始提交。出于某种原因,我们一直使用以下方法在递归调用中调用interceptorevt。想法Javascript HTML JS注入表单提交,javascript,html,forms,addeventlistener,event-listener,Javascript,Html,Forms,Addeventlistener,Event Listener,我有一个应用程序,它为提交注入了一个html事件监听器。我们想做一点验证,然后调用原始提交。出于某种原因,我们一直使用以下方法在递归调用中调用interceptorevt。想法 // SUBMIT OVERRIDES HTMLFormElement.prototype._submit = HTMLFormElement.prototype.submit; HTMLFormElement.prototype.submit = interceptor; console.l
// SUBMIT OVERRIDES
HTMLFormElement.prototype._submit = HTMLFormElement.prototype.submit;
HTMLFormElement.prototype.submit = interceptor;
console.log("AddEventListener SUBMIT override");
window.addEventListener('submit', function submit_el(e) {
console.log("PK submit calling JS interceptor");
e.preventDefault();
interceptor(e);
}, false);
function interceptor(evt) {
frm = evt ? evt.target : this;
if (!frm.onsubmit || (frm.onsubmit() !== false)) {
// DO SOME STUFF....
console.log("Calling the real form submit which should not call the listener");
frm._submit(); //form submission
console.log("Calling the real form submit - COMPLETED");
}
return false;
}
您总是在取消事件,当您调用原始onsubmit函数时,您也会启动事件侦听器,并执行与第一次相同的操作,尝试移动e.preventDefault;返回前为假;内部拦截器功能
您还可以设置一个标志,指示是否应运行原始onsubmit函数或是否应取消事件尝试移动e.preventDefault;在返回false之前调用e.preventDefault不是在调用interceptore之前调用它吗?我不知道这个建议是什么。我试着说e.preventDefault不应该在interceptore之前被调用,应该被称为insideso为什么这样做?对拦截器的调用是同步的。为什么在返回错误之前在拦截器内部调用它会起作用?