我试图尽可能地使用Rails UJS和jQuery,因为它内置于Rails中。它适用于大多数情况;但是,我遇到过一种情况,我不确定它是如何工作的。当用户选中输入字段或按输入字段时,我想将序列化表单提交给服务器,就像这个函数一样:
tag: function(){
var that = this;
$view.on('keypress','form#add-tag input#tag_name', function(e){
var $form = $(this).closest('form');
var key = e.which;
if(key == 13){
$.ajax({
type: "POST",
data: $form.serialize(),
dataType: 'script',
url: $form.attr('action'),
// contentType: 'application/javascript',
beforeSend: function() {
$('.loading').show();
},
complete: function(){
$('.loading').hide();
},
success: function(resp){
// this functionality is handled in the :js script response
}
});
return false;
}
})
}
我知道Rails UJS允许我们在输入这样的输入字段时发送ajax请求:
<%= f.text_field :name, data: { remote: true, url: contact_path(@contact), method: :post } %>
正如here所述,我们添加了一些数据属性:remote:true,我们想要请求的URL和http方法。
但是这只会发送特定输入字段的name属性及其值,而不是表单输入字段的其余部分。如果我想将所有表单输入字段发送到服务器,如何在没有表单按钮的情况下执行该操作(我只想从指定的输入字段中选项卡),该怎么办。
我的表单看起来像这样:
<%= form_for Tag.new, html: { class: 'add-tag' } do |f| %>
<%= f.fields_for :taggings, f.object.taggings.build do |taggings_builder| %>
<%= taggings_builder.hidden_field :taggable_id, value: @contact.id %>
<%= taggings_builder.hidden_field :taggable_type, value: @contact.class.name %>
<% end %>
<%= f.text_field :name, class: 'form-control tags-typeahead', placeholder: 'Add tag and press tab' %>
<% end %>