不能从连接的js捕获提交,在哪里挖掘?

时间:2019-07-07 01:14:25

标签: javascript

任务:捕获页面上的表单触发。 有以下代码:

$(document).ready(function () {
    $(document).on('submit','form',function(e){
          alert('wtf?');
     })
})

在外部连接的js中,有以下内容的代码,是通过单击某个元素触发的:

h.redirect = function (a, b) {
        var c = k.createElement("form");
        c.action = b;
        c.method = "post";
        c.target = "_top";
        c.style.display = "none";
        var d = k.createElement("input");
        d.type = "hidden";
        d.name = "token";
        d.value = a;
        c.appendChild(d);
        k.body.appendChild(c);
        c.submit()
    }

注意问题:使用c.submit()时,什么都没有捕获到,椰子没有生长,警报没有发出,但是表单起作用并且提交发生了。如何捕捉事件,或者至少解释为什么会这样? c.submit()不创建事件吗?

UPD:谢谢大家,我是一个愚蠢的麋鹿,我没有正确看代码,或者在没有提交的情况下描述了回调。

1 个答案:

答案 0 :(得分:4)

通常,第三方脚本允许自己这样的自由度(例如直接调用Submit或它的具体程度)不是很酷。这种方法别无选择,只能进行装饰:

(() => {
    var old_submit = HTMLFormElement.prototype.submit;

    HTMLFormElement.prototype.submit = function() {
        var form = this,
            args = Array.prototype.slice.call(arguments),
            submit_event = new Event('submit', {
                bubbles: true,
                cancelable: true
            });

        submit_event.original_submit = function() {
            old_submit.apply(form, args);
        };

        form.dispatchEvent(submit_event);
    }
})();

$(() => {
    var my_form = $( 'form' )[0];

    $( document )
        .on('submit', 'form', function(e) {
            alert('wtf?');
            e.originalEvent.original_submit();
        })
        .on('click', 'button', function() {
            my_form.submit();
        });
})

重点是在调用提交时调出事件的对象,其中有指向原始提交的链接,这是发送表单的唯一方法。这是恐怖,噩梦和地狱,我绝对不会这样做,但是我没有想到更好的方法。