我有一个简单的JS函数,可以根据2个输入值更新隐藏的文本框。
在更新隐藏文本框之前,我使用parseInt(x,10)来验证输入是否为数字,如果不是,我将值设置为0.
为什么这会导致过多的递归错误?
$(function () {
$("#payment-form").on("submit",function (e) {
var xDollars = $("#dollars").val();
var xCents = $("#cents").val();
//collect our form dollar and cents values, set to 0 if not int
if (parseInt(xDollars, 10) == "NaN") {
$("#dollars").val("0");
}
if (parseInt(xCents, 10) == "NaN") {
$("#cents").val("00");
}
//join dollars and cents and submit transaction amount
$("#TransactionAmount").val(xDollars + "." + xCents);
$("#payment-form").submit();
return true;
});
});
答案 0 :(得分:7)
parseInt()
导致您的问题不是 $("#payment-form").submit();
,而是这样:
true
您正在触发"提交"来自"提交"内部的行动处理程序。
如果验证成功,您只需返回String url = "http://10.10.10.166:8080/SystemManagement/api/Profile/Login";
JSONObject jsonObject=new JSONObject();
try {
jsonObject.put("user_id","Test user name");
jsonObject.put("user_password","test password");
} catch (JSONException e) {
e.printStackTrace();
}
System.out.println(jsonObject.toString());
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( Request.Method.POST, url, jsonObject,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Toast.makeText(Login.this, response.toString(),Toast.LENGTH_SHORT).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println(error.toString());
}
});
//add request to queue
queue.add(jsonObjectRequest);
,表单应正常提交。
答案 1 :(得分:2)
这是因为jQuery无法区分您是通过submit
事件还是通过.submit()
方法提交表单。因此,如果您使用jQuery的$.submit()
,它将手动触发submit
事件。
使用vanilla-js代替。根据{{3}},如果您使用.submit()
:
如果未设置从Form submission algorithm方法标志提交的,则 气泡和可取消的
submit()
命名 {em>形式的submit
。如果阻止事件的默认操作(即 如果事件被取消)则中止这些步骤。否则,继续 (实际上默认操作是执行提交)。
因此,这不会有问题:
document.getElementById('payment-form').submit();
但在这种情况下,您只需删除$("#payment-form").submit();
即可。如果您不取消活动,则应自动提交表格。