ユーザーがラベルをクリックするとすぐにフォームをjavascriptで送信します。データが投稿されない不思議な振る舞いがあります。しかし、フォームを遅れて(たとえ0の遅れで)提出すれば、それは機能します。ここでJSでフォームを送信するときに投稿変数が設定されていない
はhtmlです:
<form action="/other-page" method="post">
<input id="val-1" type="checkbox" name="filter[]" value="1">
<label for="val-1">Value 1</label>
<input id="val-2" type="checkbox" name="filter[]" value="2">
<label for="val-2">Value 2</label>
</form>
スクリプト:
<script>
$('label').click(function() {
var form = $(this).closest('form')
// if I use the following line the values won't be set
form.submit()
// If I use a `setTimeout` it works, even with a delay of 0
setTimeout(function() {
form.submit()
}, 0)
})
</script>
それは私がsetTimeout
で、この作品を作ることができるように大きな問題ではないのですが、0の遅延でこれを書くことが本当にあります醜い。私はブラウザのバグについて考えましたが、私はChromeとFirefoxでテストしましたが、私は同じ結果を持っています。
何が起こっているか考えてみましょうか?
の入力にクリックイベントを使用している、あなたは準備ができてDOMでこれを実行していますか? –
値が実際に変更される前に 'click'イベントがトリガされたと仮定します。 –
@DavidFregoliはい、申し訳ありませんが含めることを忘れていました – romainberger