Javascript 如何在购物车中提交前检查有效整数数量
购物车数量输入表单使用下面的代码定义。 数量最初必须为空 表单是使用jquery post()通过ajax提交的 如何在提交前检查数量是否填写了大于0的整数 我尝试了下面的代码,但警报框返回[htmlinputelement],因此检查失败Javascript 如何在购物车中提交前检查有效整数数量,javascript,jquery,jquery-ui,validation,form-submit,Javascript,Jquery,Jquery Ui,Validation,Form Submit,购物车数量输入表单使用下面的代码定义。 数量最初必须为空 表单是使用jquery post()通过ajax提交的 如何在提交前检查数量是否填写了大于0的整数 我尝试了下面的代码,但警报框返回[htmlinputelement],因此检查失败 <form class='browse-addtocart-form' action="<%= Url.Action("AddToCartPost", "Store")%>" method="post"> <
<form class='browse-addtocart-form' action="<%= Url.Action("AddToCartPost", "Store")%>" method="post">
<input class='amount ui-corner-all' name="quantity" type="number" value=""
size="3" min="0" step="1" /></span>
<input type="submit" value="Add to cart" />
</form>
<script>
$(function() {
$(".browse-addtocart-form").submit(function(event){
var $form = $(this);
var serializedData = $form.serialize();
alert($form[0].quantity);
if ($form[0].quantity==="" || $form[0].quantity==="0") {
alert('Please fill quantity with non zero integer');
event.preventDefault();
return;
}
$.post('<%= Url.Action("AddToCart", "Store")%>',
serializedData, function(response) {
$("#cart-status").text(response.Total);
showMessage(response.Message);
showFadeOutMessage(response.Message);
}));
event.preventDefault();
});
});
</script>
$(函数(){
$(“.browse addtocart form”).submit(函数(事件){
var$form=$(此);
var serializedData=$form.serialize();
警报($form[0]。数量);
如果($form[0]。数量==“”| |$form[0]。数量==“0”){
警报(“请用非零整数填写数量”);
event.preventDefault();
返回;
}
$.post(“”,
序列化数据,函数(响应){
$(“#购物车状态”).text(response.Total);
showMessage(response.Message);
showFadeOutMessage(response.Message);
}));
event.preventDefault();
});
});
使用jquery、jquery UI、ASP.NET MVC2。关于
事件的小说明。preventDefault()代码>。您可以返回false;`这也将停止发送您的帖子,您甚至不需要事件参数
因为您已经有了var serializedData=$form.serialize()
,我建议您使用serializedData.quantity
一个关于事件.preventDefault()的小注释从中提取“数量”代码>。您可以返回false;`这也将停止发送您的帖子,您甚至不需要事件参数
因为您已经有了var serializedData=$form.serialize()
,我建议您使用serializedData从中提取“数量”。数量
最简单的方法可能是调用parseInt并检查它是否返回NaN
var q = parseInt($form[0].quantity, 10);
if(isNaN(q) || q === 0){
alert('Please fill quantity with non zero integer');
}
编辑以将base=10添加到parseInt,并使用isNaN()。如果不添加显式基数10,parseInt将把以零开头的字符串误认为是八进制数,十六进制也是如此。最简单的方法可能是调用parseInt并检查它是否返回NaN
var q = parseInt($form[0].quantity, 10);
if(isNaN(q) || q === 0){
alert('Please fill quantity with non zero integer');
}
编辑以将base=10添加到parseInt,并使用isNaN()。如果不添加显式的基数10,parseInt将把以零开头的字符串误认为是八进制数,而把以零开头的字符串误认为是十六进制数。试试看
$(function() {
$(".browse-addtocart-form").submit(function(event) {
var $form = $(this);
var serializedData = $form.serialize();
if (this.quantity.value === "" || this.quantity.value === "0") {
alert('Please fill quantity with non zero integer');
return false;
}
$.post('<%= Url.Action("AddToCart", "Store")%>',
serializedData, function(response) {
$("#cart-status").text(response.Total);
showMessage(response.Message);
showFadeOutMessage(response.Message);
});
return false;
});
});
$(函数(){
$(“.browse addtocart form”).submit(函数(事件){
var$form=$(此);
var serializedData=$form.serialize();
如果(this.quantity.value==“”| | this.quantity.value===“0”){
警报(“请用非零整数填写数量”);
返回false;
}
$.post(“”,
序列化数据,函数(响应){
$(“#购物车状态”).text(response.Total);
showMessage(response.Message);
showFadeOutMessage(response.Message);
});
返回false;
});
});
试试看
$(函数(){
$(“.browse addtocart form”).submit(函数(事件){
var$form=$(此);
var serializedData=$form.serialize();
如果(this.quantity.value==“”| | this.quantity.value===“0”){
警报(“请用非零整数填写数量”);
返回false;
}
$.post(“”,
序列化数据,函数(响应){
$(“#购物车状态”).text(response.Total);
showMessage(response.Message);
showFadeOutMessage(response.Message);
});
返回false;
});
});
什么是因此检查失败
?什么是因此检查失败
?我使用了来自http://stackoverflow.com/questions/5004233/jquery-ajax-post-example的代码为什么在这个高分示例中不使用return false
?我使用了来自http://stackoverflow.com/questions/5004233/jquery-ajax-post-example为什么在这个高分示例中不使用return false
?谢谢。我在if语句中添加了returnfalse
。在这种情况下,警报框仅在第一次单击时显示。对按钮的后续单击将被忽略,按钮单击时不会触发提交事件。如何解决这个问题?恐怕我没有看到任何明显的东西会导致事件只在第一次发生。如果您使用的是Firebug或Chrome的内置调试器,那么一个可能有助于调试此功能的技巧是计算$(“.browse addtocart form”).data('events'),并检查提交处理程序是否仍然正确绑定。还要检查调试器日志中是否有任何错误,或者在处理程序中放置断点以确保它确实不会触发。$(“.browse addtocart form”).data('events')
在FireBUg命令提示符中重新定义未定义的事件。它不存在于我的错误中,我花了几个月才意识到这一点$().data('events')从jquery 1.8开始就不推荐使用。相反,您现在必须使用$。_数据($('.browse addtocart form')[0],'events')。谢谢。我在if语句中添加了returnfalse
。在这种情况下,警报框仅在第一次单击时显示。对按钮的后续单击将被忽略,按钮单击时不会触发提交事件。如何解决这个问题?恐怕我没有看到任何明显的东西会导致事件只在第一次发生。如果您使用的是Firebug或Chrome的内置调试器,那么一个可能有助于调试此功能的技巧是计算$(“.browse addtocart form”).data('events'),并检查提交处理程序是否仍然正确绑定。还要检查调试器日志中是否有任何错误,或者在处理程序中放置断点以确保它确实不会触发。$(“.browse addtocart form”).data('events')
在FireBUg命令提示符中重新定义未定义的事件。它不存在于我的错误中,我花了几个月才意识到这一点$().data('events')从jquery 1.8开始就不推荐使用。您现在必须使用$。_数据($(')。浏览addtocart表单