更新时间:2022-10-17 08:42:55
根据 Emmett 的回答,我对此的理想解决方法是使用 Javascript 本身终止表单的提交,如下所示:
$(".vote_form").submit(function() { return false; });
这完全奏效了.
为了完整性,我在原帖中的一些 JS 代码需要一点爱.例如,我添加到序列化函数的方式似乎不起作用.这样做了:
$form.serialize() + "&submit="+ $(this).attr("value")
这是我的整个 jQuery 代码:
$(".vote_form").submit(function() { return false; });$(".vote_up, .vote_down").click(function(event) {$form = $(this).parent("form");$.post($form.attr("action"), $form.serialize() + "&submit="+ $(this).attr("value"), function(data) {//对响应(数据)做一些事情});});
I have a form that looks like this:
<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>
When I bind to the form's submit ($("vote_form").submit()
), I don't seem to have access to which image the user clicked on. So I'm trying to bind to clicking on the image itself ($(".vote_down, .vote_up").click()
), which always submits the form, regardless of whether I try
because all of those are form events.
Should I attach my $.post() to the form.submit() event, and if so, how do I tell which input the user clicked on, or
Should I attach my $.post() to the image click, and if so, how do I prevent the form from submitting also.
Here is what my jQuery code looks like now:
$(".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!?
});
Based on Emmett's answer, my ideal fix for this was just to kill the form's submit with Javascript itself, like this:
$(".vote_form").submit(function() { return false; });
And that totally worked.
For completeness, some of my JS code in the original post need a little love. For example, the way I was adding to the serialize function didn't seem to work. This did:
$form.serialize() + "&submit="+ $(this).attr("value")
Here's my entire jQuery code:
$(".vote_form").submit(function() { return false; });
$(".vote_up, .vote_down").click(function(event) {
$form = $(this).parent("form");
$.post($form.attr("action"), $form.serialize() + "&submit="+ $(this).attr("value"), function(data) {
// do something with response (data)
});
});