次のようなフォームがあります。
<form action="/vote/" method="post" class="vote_form">
<input type="hidden" name="question_id" value="10" />
<input type="image" src="vote_down.png" class="vote_down" name="submit" value="down" />
<input type="image" src="vote_up.png" class="vote_up" name="submit" value="up" />
</form>
フォームの送信 ( $("vote_form").submit()) にバインドすると、ユーザーがクリックした画像にアクセスできないようです。そのため、画像自体をクリックするようにバインドしようとしています ( $(".vote_down, .vote_up").click())。これは、試行するかどうかに関係なく、常にフォームを送信します。
- false を返します。
- event.stopPropogation(); また
- event.preventDefault();
これらはすべてフォーム イベントであるためです。
$.post() を form.submit() イベントにアタッチする必要がありますか?もしそうなら、ユーザーがクリックした入力をどのように知ることができますか?
$.post() を画像のクリックに添付する必要がありますか?もしそうなら、フォームが送信されないようにするにはどうすればよいですか?
私のjQueryコードは次のようになります。
$(".vote_up, .vote_down").click(function (event) {
$form = $(this).parent("form");
$.post($form.attr("action"), $form.find("input").serialize() + {
'submit': $(this).attr("value")
}, function (data) {
// do something with data
});
return false; // <--- This doesn't prevent form from submitting; what does!?
});