如何在使用twitter bootstrap时使用jquery获取表单对象

时间:2013-02-20 10:49:26

标签: javascript jquery twitter-bootstrap

我有来自twitter bootstrap的模型对象,如下所示

        <!-- Name Edit div -->
<div id="form-content" class="modal hide fade in" tabindex="-1">
  <form name="form" action="<c:url value="/editname" />" method="post">
    <div class="modal-header">
      <h4>Edit Name</h4>
    </div>
    <div class="modal-body">
     <div class="control-group">
        <div class="controls">
          <ul class="nav nav-list">
            <li class="nav-header">First Name</li>
            <li><input type="text" placeholder="First Name" name="firstName" id="firstName" class="input-xlarge help-inline"></li>
            <li class="nav-header">Last Name</li>
            <li><input type="text" placeholder="Last Name" name="lastName" id="lastName" class="input-xlarge help-inline"></li>
         </ul>
        </div>
      </div>
    </div>
    <div class="modal-footer">
       <button id="submit"  class="btn btn-success">Update</button>
       <button class="btn" data-dismiss="modal" >Close</button>
    </div>
  </form>
</div>

我的ajax脚本如下:

$(function() {
    //twitter bootstrap script
    $("button#submit").click(function(){
        var $form = $(this).closest("form").attr('id');
        $.ajax({
            type: $form.attr('method'),
            url: $form.attr('action'),
            data: $form.serialize(),
            success: function(msg){
                $("#thanks").html(msg);
                $("#form-content").modal('hide');
            },
            error: function(){
                //alert("failure");
            }
        });
    });
});

但请求没有解雇。我检查了firebug,看起来它无法获取表单对象,并且请求不会转到控制器。我怎样才能让它发挥作用。我将来会在同一页面中有多个表单。

4 个答案:

答案 0 :(得分:3)

我建议您使用.submit()函数:

$(function() {
    $('#form_id').submit(function(e) {
        e.preventDefault();
        var form = $(this);
        $.ajax({
          type: form.attr('method'),
          url: form.attr('action'),
          data: form.serialize(),
          success: function(msg){
            $("#thanks").html(msg);
            $("#form-content").modal('hide');    
          },
          error: function(){
            //alert("failure");
          }
        });
    });
});

将表单ID设置为某个内容并更改javascript以匹配

您还可以向要提交bia ajax的所有表单添加data-ajax="true",然后使用:

var forms = $('form[data-ajax="true"]');
forms.submit(function(e){
    e.preventDefault();
    // do ajax
});

答案 1 :(得分:2)

<form name="form" action="<c:url value="/editname" />" method="post">

有一点是你没有给表格提供身份证明。

var $ form = $(this).closest(“form”)。attr('id');

如果id存在(如果你通过代码添加它),那么上面的$form将包含表单的id。那是一个字符串。

所以像这样使用,

var $form = $(this).closest("form");

代替

var $form = $(this).closest("form").attr('id');

答案 2 :(得分:0)

您的表单没有id属性。给它一个它可能会工作。 所以

    var $form = $(this).closest("form").attr('id');

不会返回值。

答案 3 :(得分:0)

所有HTML表单输入控件(输入,选择,按钮等)都有对其所有者的引用。这样做可以:

var $form = $(this.form);

但我认为oleron使用submit事件的答案是正确的方法。