我有一个可注入html事件监听器以提交的应用程序。我们想做一点验证,然后调用原始提交。出于某些原因,我们使用以下内容在递归调用中不断调用“ interceptor(evt)”。有什么想法吗?

 // 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();之前移动return false;

您还可以创建一个标志,指示是否应运行原始的onsubmit函数或是否应取消该事件

关于javascript - HTML JS注入(inject)表单提交,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55173153/

10-12 12:37
查看更多