5

ユーザーがラベルをクリックするとすぐに、javascript で送信するフォームがあります。データが投稿されない奇妙な動作があります。しかし、フォームを遅延して (遅延が 0 であっても) 送信すると、機能します。

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 でテストしたところ、同じ結果が得られました。

何が起こっているかについて何か考えはありますか?

4

2 に答える 2

0

誰か (私は彼のユーザー名を思い出せません) が解決策を投稿しましたが、反対票を投じられたため、彼は回答を削除しました。しかし、彼の解決策は正しかったので、次のとおりです。

私がする必要があるのは、ラベルの代わりに入力でクリックイベントを使用することだけです

$('input[type=checkbox]').click(function() {
        $(this).closest('form').submit()
})
于 2013-05-03T13:39:14.817 に答える