Theo cách Javascript thuần túy, bạn có thể gửi biểu mẫu sau khi ngăn chặn mặc định.
Điều này là do HTMLFormElement.submit()
never calls số onSubmit()
. Vì vậy, chúng tôi đang dựa vào đặc điểm kỹ thuật đó để gửi biểu mẫu như thể nó không có trình xử lý tùy chỉnh ở đây.
var submitHandler = (event) => {
event.preventDefault()
console.log('You should only see this once')
document.getElementById('formId').submit()
}
Xem this fiddle để có yêu cầu đồng bộ.
Chờ một yêu cầu async để kết thúc chỉ là dễ dàng:
var submitHandler = (event) => {
event.preventDefault()
console.log('before')
setTimeout(function() {
console.log('done')
document.getElementById('formId').submit()
}, 1400);
console.log('after')
}
Bạn có thể kiểm tra fiddle của tôi cho một example của một yêu cầu không đồng bộ.
Và nếu bạn là xuống với lời hứa:
var submitHandler = (event) => {
event.preventDefault()
console.log('Before')
new Promise((res, rej) => {
setTimeout(function() {
console.log('done')
res()
}, 1400);
}).then(() => {
document.getElementById('bob').submit()
})
console.log('After')
}
Và đây là that request.
Đây là chế độ song công, không thể tìm thấy: - /. Dài câu chuyện ngắn, bạn phải kích hoạt sự kiện một lần nữa và không ngăn chặn các hành động mặc định lần thứ hai (sử dụng một lá cờ). –
@FelixKling Ý của bạn là http://stackoverflow.com/questions/7610871/how-to-trigger-an-event-after-using-event-preventdefault? –