是否可以在有Ajax的两个页面中调用表单?

时间:2017-04-23 21:26:27

标签: javascript jquery ajax forms

我在一个页面上有两个表单,一个表单用于上传文件,另一个用于弹出窗口,在文件上传时要求发送电子邮件。两者都使用ajax,我在处理它们时遇到了一些麻烦。

我希望我的每个ajax代码只能在他们各自的表单上工作,而不是在我的html页面上找到的第一个表单(现在只有最高<form></form>由我的ajax代码提供。)< / p>

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>

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以在$(this).is(selector)语句中使用if来验证您处理的是哪种表单,例如

$(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");
});