2

我正在使用 asp.net,所以它已经有一个<fomr id="aspnetForm" name="aspnetForm">.

我想要一个允许“单独提交多个表单”的页面。例如,我希望用户保存他们的简历。在“教育经验”页面上,我想允许用户的多条记录,每条记录都可以用ajax单独编辑和保存,但在ajax之前验证。

就像是:

<form id="aspnetForm" name="aspnetForm">
<div class="item_edit">
    1
    <input type="text" class="required" name="title" />
    <input type="text" class="required" name="description" />
    <input type="button" class="save" value="save" />
</div>
<div class="item_edit">
    2
    <input type="text" class="required" name="title" />
    <input type="text" class="required" name="description" />
    <input type="button" class="save" value="save" />
</div>
</form>

$("input.save").click(function(){
    var thediv = $(this).parent();
    if(thediv.valid()){
        //save with ajax
    }
    else{
        //show error, modal window preferred
    }
})

顺便说一句:如果有帮助,我正在使用backbone.js。

编辑:我的backbone.js 代码如下所示。以上<div class="item_edit">是从模板渲染的。

APIPortfolio.Views.OtherInfoCollection = Backbone.View.extend({
    el : "#otherinfo-container",
    template : "#otherinfo-template",
    initialize : function(options) {
    this.modelList = options.modelList.models;
    },
    render : function() {
        var self = this;
    $(self.el).empty();
    _.each(this.modelList, function(model) {
            $(self.el).append(Mustache.to_html($(self.template).html(), model.toJSON()));
    })
    return this;
}
});
4

3 回答 3

0

实际上,您没有使用 Backbone.js。但是如果你决定这样做,你应该有一个代表你的表单的视图,它与一个模型实例相关联。在您的视图中,您应该有一个 events 属性来处理您的点击事件,如下所示:

var Thingy = Backbone.Model.extend({
  //implement me
})

var ThingyForm = Backbone.View.extend({
  events: function(){
    'input.save click': function(){
      if(this.model.isValid()){
          this.model.save()
      }
      else{
          //show error, modal window preferred
      }
    }
  }
})

thingy = new Thingy({attr1: 'val1', attr2: 'val2'})
thingyForm = new ThingyForm({model: thingy})

要将其连接到远程资源并连接模型的验证等,还有很多工作要做。但这应该可以帮助您入门。我可以建议以下两个资源:

Backbone.js Documentation - 全面,Backbone 非常轻量级,你大概可以在一个小时内阅读完整的源代码。

Backbone Fundamentals 免费电子书- 该书的前四章或五章将帮助您入门。

祝你好运。

于 2012-04-20T04:38:41.443 回答
0

为什么不使用 jQuery 验证?您可以向 html 元素添加属性,并通过一次调用验证所有这些属性。

这是它的链接......似乎它可以解决问题http://docs.jquery.com/Plugins/Validation

于 2012-04-20T04:30:08.370 回答
0

假设您的“item_edit”div 中可能有更多类型的表单元素,您可以为 div 中的每个表单元素添加一个类,并将其称为“item”。所以'item_div'现在看起来像:

<div class="item_edit">
    1
    <input type="text" class="required item" name="title" />
    <input type="text" class="required item" name="description" />
    <input type="button" class="save" value="save" />
</div>

我们这样做是为了不假设“item_edit”中只有“标题”和“描述”

您可以定义一个以这种方式保存表单的部分元素的函数:

function savePartial(itemEditDiv)
{
    var bool = true;
    $(itemEditDiv).find('item').each(function(){
        var val = $(this).val()    //this is the value of the 'title' or 'description' etc
        //code to check if the value is valid (set bool = false in case its not valid)
    });
    return bool;
}

现在您需要做的就是向“保存”按钮添加一个单击事件处理程序来调用此 savePartial 函数:

$("input.save").click(function(){
    var thediv = $(this).parent();
    if(savePartial(thediv))
    {
         //success message
    }
    else
    {
        //something went wrong
    }
});

此外,您可以将“msg”参数添加到“项目”字段并捕获数组中无效项目的消息以显示错误消息。

于 2012-04-20T04:54:38.670 回答