任务:捕获页面上的表单触发。 有以下代码:
$(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:谢谢大家,我是一个愚蠢的麋鹿,我没有正确看代码,或者在没有提交的情况下描述了回调。
答案 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();
});
})
重点是在调用提交时调出事件的对象,其中有指向原始提交的链接,这是发送表单的唯一方法。这是恐怖,噩梦和地狱,我绝对不会这样做,但是我没有想到更好的方法。