🤬

form 内に id="submit", name="submit" の要素があるときに form.submit() を実行できない

2023/08/09に公開

ということがあったのでこれを回避したメモ。

状況

自分の管理下の form であるならば id name が submit の要素を入れなければいいだけだが、自分の管理外のページに汎用的に script で submit の割り込み処理を入れる必要があった。

たとえばこんな html があって

<form id="form">
	<input type="submit" id="submit" />
</form>

こんな処理を入れたい

const targetForm = document.getElementById('form');

targetForm.addEventlistener('submit',function(event){
	event.preventDefault();
	
	console.log('waiting...');
	
	window.setTimeout(function(){
		targetForm.submit(); // ここが問題
	},1000)
})

すると、

targetForm.submit is not a function

とか言われる。

解決

以下で回避

HTMLFormElement.prototype.submit.call(targetForm);

参考

https://stackoverflow.com/questions/12540953/property-submit-of-object-htmlformelement-is-not-a-function
https://qiita.com/opengl-8080/items/85172366887e4b9d36b2

Discussion