Javascript 在一个有两个Ajax的页面中,是否可以调用表单?
我在一个页面上有两个表单,一个表单用来上传文件,另一个表单出现在一个弹出窗口中,当文件上传后会要求发送电子邮件。两者都使用ajax,我在处理这两者时遇到了一些问题 我希望我的每个ajax代码只在各自的表单上工作,而不是在我的html页面上找到的第一个表单(现在只有最高的Javascript 在一个有两个Ajax的页面中,是否可以调用表单?,javascript,jquery,ajax,forms,Javascript,Jquery,Ajax,Forms,我在一个页面上有两个表单,一个表单用来上传文件,另一个表单出现在一个弹出窗口中,当文件上传后会要求发送电子邮件。两者都使用ajax,我在处理这两者时遇到了一些问题 我希望我的每个ajax代码只在各自的表单上工作,而不是在我的html页面上找到的第一个表单(现在只有最高的由我的ajax代码执行) AJAX: # for uploading files form $("#fileupload").fileupload({ dataType: 'json', sequentialU
由我的ajax代码执行)
AJAX:
# for uploading files form
$("#fileupload").fileupload({
dataType: 'json',
sequentialUploads: true,
start: function (e) {
$("#modal-progress").modal("show");
},
...
done: function (e, data) {
if (data.result.is_valid) {
...
}
}
});
# for email form
$(document).on('submit', '#formTwo', function(e){
e.preventDefault();
$.ajax({
# is there a command to specify in which form it should run ?
type:'POST',
url:'/tools/newsletter/',
data:{
email:$('#email').val(),
csrfmiddlewaretoken:$('#formTwo input[name=csrfmiddlewaretoken]').val(),
},
});
$("#modal-progress").modal("hide");
});
forms.html
<!-- Email form -->
<form id="formTwo" method="post" action="newsletter">
...
<input id="email" maxlength="255" placeholder="Votre adresse email" name="email" type="text" class="form-control">
<input type="submit" class="btn btn-success">
</form>
<!-- Uploading files form -->
<form id="formOne" method="post" enctype="multipart/form-data" action="{% url 'basic_upload' %}">
...
<input id="fileupload" type="file" name="file" multiple>
</form>
...
...
如何解决此问题?您可以在if
语句中使用$(this).is(选择器)
来验证您正在处理的表单,如
$(document).on('submit', '#formTwo, #formOne', function(e){
e.preventDefault();
if($(this).is('#formTwo')) {
$.ajax({
type:'POST',
url:'/tools/newsletter/',
data: {
email:$('#email').val(),
csrfmiddlewaretoken:$('#formTwo input[name=csrfmiddlewaretoken]').val(),
},
});
} else if ($(this).is('#formOne')) {
// formOne code
}
$("#modal-progress").modal("hide");
});
您的第一个表单没有正确关闭,它缺少表单前面的关闭标记的
/
。@Pango只是在stackoverflow上编辑的一个输入错误,已更正。