我有一个表单,我想通过JavaScript提交。显然,这可以通过以下方式实现:
submit
问题是我在document.getElementById("myForm").addEventListener("submit", function(event) {
event.preventDefault();
// Other work
});
事件上有一个听众,如下所示:
.submit()
当我呼叫 $fb = new Facebook([
'app_id' => '00000000000',
'app_secret' => '000000000000',
'default_graph_version' => 'v2.5',
]);
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
$request = $fb->request('GET', "/me/accounts", [], $_SESSION['facebook_access_token']);
$response = $fb->getClient()->sendRequest($request);
$body = $response->getDecodedBody();
时,不会触发此事件处理程序。来自MDN:
表单的onsubmit事件处理程序(例如,onsubmit =“return false;“)从调用此方法时不会被触发 基于Gecko的应用程序。一般来说,不能保证 由HTML用户代理调用。
因此,考虑到这种限制,我如何以确保调用事件处理程序的方式提交表单?
答案 0 :(得分:4)
您需要创建一个提交事件,然后发送它。
(function () {
if ( typeof window.CustomEvent === "function" ) return false;
function CustomEvent ( event, params ) {
params = params || { bubbles: true, cancelable: true, detail: undefined };
var evt = document.createEvent('submit');
evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
return evt;
}
CustomEvent.prototype = window.Event.prototype;
window.CustomEvent = CustomEvent;
})();
var evt = new CustomEvent("submit", {"bubbles":true, "cancelable": true});
document.getElementById("myForm").addEventListener("submit",function(event) {
event.preventDefault();
alert('submit');
});
然后,当您想要提交此功能时,您需要致电:
!document.getElementById("myForm").dispatchEvent(evt);
有关更多活动信息,请参阅dispatchEvent.
答案 1 :(得分:-3)
使用jQuery提交表单并添加处理程序。
$("#myForm").on("submit", function(e){
e.preventDefault();
// Handle submission here
});
// Then later
$("#myForm").submit();