我有几种形式。我尝试用AJAX jQuery来管理它们。我想最小化我使用的代码,所以我尝试对所有表单使用相同的AJAX函数。我的代码不起作用。这就是我所拥有的:
HTML
<form id="mi_forma_1">
<input type="hidden" name="forma" value="mi_forma_1" />
<input type="submit" value="Enviar" id="1" />
</form>
<form id="mi_forma_2">
<input type="hidden" name="forma" value="mi_forma_2" />
<input type="submit" value="Enviar" id="2" />
</form>
的jQuery
id_formulario = null;
$("input:submit").click(function(e){
e.preventDefault();
id_del_submit = $(this).attr('id'); // This having 1 or 2
id_formulario = '"#mi_forma_'+id_del_submit+'"';
});
$(id_formulario).on("submit", function(e) {
e.preventDefault();
var datos = $(id_formulario).serializeArray();
$.ajax({
//...
});
});
结果:没什么!当我单击提交时,AJAX不会被执行。我做了几次测试,发现 id_formulario 变量包含字符串“mi_forma_1”或“#mi_forma_2”。
为什么AJAX从未执行过?
似乎行 $(id_formulario).on(“提交”... 无法识别 id_formulario 的值。 怎么解决这个问题?
答案 0 :(得分:2)
id_formulario
中有一个转义字符串。使用单引号或双引号,但不要同时使用它们,除非您希望它们成为字符串的一部分(您不需要)。
更改
'"#mi_forma_'+id_del_submit+'"'
到
"#mi_forma_" + id_del_submit
此外,由于您阻止了提交按钮的默认行为,因此可能永远不会执行提交操作。删除该行或添加类似
的内容$(id_formulario).trigger("submit")
提交点击事件监听器。
最后一点:您正在使用null作为选择器注册提交事件侦听器,而不是您认为的值。首先,您将两个函数注册为事件侦听器。但是,您希望在第二个侦听器注册之前执行第一个侦听器的回调 - 这不会发生。变量id_formulario
仅在按下提交按钮时更改。但是,之后您不会致电$(id_formulario).on("submit", ...
。
我将如何写它:
$("#mi_forma_1, #mi_forma_2").on("submit", function(e) {
e.preventDefault();
var datos = $(this).serializeArray();
$.ajax({
//...
});
});
通过“this”引用可确保您使用正确的表单。无需构建任何ID。
答案 1 :(得分:-1)
您的代码错误,变量“id_formulario”以“null”启动,您的分配仅在按钮点击时发生。请记住,“。click”是一个事件,只有在用户操作发生时才会执行事件。
var id_formulario = null;
$("input:submit").click(function(e){
e.preventDefault();
id_del_submit = $(this).attr('id'); // This having 1 or 2
id_formulario = '"#mi_forma_'+id_del_submit+'"';
// editing
var datos = $(id_formulario).serializeArray();
$.ajax({
//...
});
});