Ajax表单提交

时间:2013-09-02 15:12:41

标签: javascript jquery ajax

我知道这里已经被问了一百万次了,我看了几个例子,但是我无法弄清楚为什么这个表格正在提交。 Ajax似乎没有被调用,所以我认为它像div id一样简单。我现在在这30分钟里一直很沮丧。

JS:

$('#genform').submit(function (e) {
    alert('hi');
    e.preventDefault();
    $.ajax({
        url: "month.php",
        type: "post",
        data: $('#form').serialize(),
        success: function (msg) {
            $("#info").html(msg);
        }
    });
});

HTML:

<!-- trigger button -->
<div class="col-md-4">
<a href="#" id="toggle" class="btn btn-default dropdown-toggle btn-sm"> Bulk PDF Export <span class="caret"></span></a> 
</div>
<!--- popup form div -->
<div id="gendiv" style="display:none;">
    <form id="genform">
        <div class="form-input">
            <select name="month">
                <option value="2013-09-01">September 2013</option>
                <option value="2013-08-01">August 2013</option>
                <option value="2013-07-01">July 2013</option>
            </select>
        </div>
        <div class="form-input"><i class="icon-ellipsis-horizontal"></i> PGY-1  <span class="pull-right"><input type="checkbox" id="pgy1" checked name="pgy[1]"></span> 
        </div>
        <div class="form-input"><i class="icon-ellipsis-horizontal"></i> PGY-2  <span class="pull-right"><input type="checkbox" id="pgy2" checked name="pgy[2]"></span> 
        </div>
        <div class="form-input"><i class="icon-ellipsis-horizontal"></i> PGY-3  <span class="pull-right"><input type="checkbox" id="pgy3" checked name="pgy[3]"></span> 
        </div>
        <div class="form-input" style="text-align:center">
            <button type="submit" class="btn btn-primary btn-xs">Generate</button>
        </div>
        <div id="info"></div>
    </form>
</div>

小提琴:http://jsfiddle.net/KQ2nM/2/

2 个答案:

答案 0 :(得分:1)

它不起作用的原因是因为popover克隆了表单,然后将html放在一个带有.popover-content类的div中。

这意味着您绑定的事件仅附加到隐藏#genform内的原始 #gendiv

请改用:

$(document).on('submit', '#genform', function(e) {
    e.preventDefault();
    $.ajax({
        url: "month.php",
        type: "post",
        data: $(this).serialize(),
        success: function (msg) {
            $("#info").html(msg);
        }
    });
});

这使用jQuery的.on()函数并将事件处理程序附加到document,它基本上监视在标识为submit的表单上触发的#genform事件。通过将事件处理程序附加到document而不是直接附加到目标元素,它将由submit事件触发,而不管绑定事件时是否存在标识为#genform的表单。

这里有效:http://jsfiddle.net/KQ2nM/4/

答案 1 :(得分:-1)

您缺少一些结束标记:

<div class="form-input">
    <i class="icon-ellipsis-horizontal"></i> PGY-1 <span class="pull-right">
        <input type="checkbox" id="pgy1" checked name="pgy[1]">   </input>    <--- here
    </span>
</div>

表单方法(否则会吐出错误):

<form id="genform" method="POST">

现在django抱怨CSRF令牌,但那是你的东西;)
Here是新的小提琴。

编辑:似乎我弄错了,因为它现在提交而不调用您的自定义处理程序并且Joe修复了它。但是你仍然需要关闭这些输入:)