我有一个表单,大部分只是作为普通表单提交,所以我不想在form_tag中设置:remote =>真实的选择。
然而,在某些情况下,我希望能够在表单上发布javascript函数,就好像它已发布者:remote =>真正。我需要在javascript中做些什么来完成这个?
答案 0 :(得分:33)
我对此并不熟悉,但这里有......
rails.js(至少是jquery)定义了以下函数来捕获和提交表单:
$('form').live('submit.rails', function(e) { ... });
如果您使用以下内容,它应该触发相同的功能(如果:remote => true,那么它不会导致页面重新加载):
$("#<yourformid>").trigger("submit.rails");
因此,如果您想在选择更改中提交表单,您可以将上述触发器调用设置为我想象的选择:onchange。
答案 1 :(得分:5)
我刚试过这个肯定有效,如果表单有远程=&gt;是的,只需删除数据远程属性即可正常提交w / javascript即
$('input').click(function(){ $('#form').removeAttr('data-remote') });
我猜相反的可能会起作用,即如果表单没有remote =&gt;这是真的
$('input').click(function(){ $('#form').attr('data-remote',true)});
答案 2 :(得分:3)
也许你可以试试这个:
$('#form').submit();
答案 3 :(得分:2)
如果您正在使用jQuery,您可以执行类似这样的操作,使表单自动发布在keyup事件上,或者将其简化为手动触发:
$(function() {
$("#live_search input").keyup(function() {
q = $('#search_text').val();
$.ajax({
beforeSend : function(request) { request.setRequestHeader("Accept", "text/javascript"); },
// Included so Rails responds via "format.js"
data : 'query=' + q,
success : function(data, textStatus, XMLHttpRequest) {
// alert(textStatus);
$("#live_search #results").html(data);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
// alert(errorThrown);
$('#annotation_dialog').html(XMLHttpRequest.responseText);
},
type : 'POST',
url : '/search/live'
});
return false;
});
});
答案 4 :(得分:1)
在Rails 5中(使用rails-ujs替换jquery-ujs),这就是触发处理程序rails附加到表单submit
事件的方式:
var elem = document.getElementById('myform') // or $('#myform')[0] with jQuery
Rails.fire(elem, 'submit');
(圣牛确实让我永远想出来了!)