我有一个Rails 3应用程序尝试使用按钮执行某些控制器操作并且:remote =>真正。目前,我甚至不想担心行动的成功,我只想让它自己发生,并有一些onclick脚本立即隐藏元素。
我似乎无法让他们同时工作。这是我正在使用的代码,它可以很好地执行操作:
<%= button_to "Ignore", url_for(:controller => "requests", :action => "ignore", :id => request.id), :remote=>true %>
现在,当我尝试添加onclick时,该部分会被执行,但突然请求被视为HTML,因此我被发送到新页面而不是将其视为“远程”:
<%= button_to "Ignore", url_for(:controller => "requests", :action => "ignore", :id => request.id), :remote=>true, :onclick => "ignore('request_'"i.to_s"')" %>
据我所知,按钮的代码创建得很好,并且onclick工作正常,但添加它会使请求搞砸。有人可以帮帮我吗?非常感谢
答案 0 :(得分:2)
您的onclick属性有错误。
<%= button_to "Ignore", url_for(:controller => "requests", :action => "ignore", :id => request.id), :remote=>true, :onclick => "ignore('request_#{ i.to_s }'); return(false);" %>
但是,你应该考虑不引人注意地这样做。
<%= button_to "Ignore", url_for(:controller => "requests", :action => "ignore", :id => request.id), :remote=>true, :'data-ignore-id' => i %>
然后在application.js
中$('[data-ignore-id]').live('click', function(ev) {
ev.preventDefault();
var ignoreId = "request_" + $(this).attr('data-ignore-id').toString();
ignore(ignoreId);
});
问题是,当你提供url_for时,button_to帮助器正在构建一个表单。对于你想要阻止的动作是onsubmit而不是onclick。
<%= button_to "Ignore", url_for(:controller => "requests", :action => "ignore", :id => request.id), :remote=>true, :'data-ignore-id' => i %>
然后在application.js
中$('[data-ignore-id]').submit(function(ev) {
ev.preventDefault();
var ignoreId = "request_" + $(this).attr('data-ignore-id').toString();
ignore(ignoreId);
});
<form method="post" action="/requests/41/ignore" data-remote="true" class="button_to">
<div>
<input data-ignore-id="0" type="submit" value="Ignore" />
<input name="authenticity_token" type="hidden" value="7S3K+ZFhSZij1ZAmSeggG0SpPozNwHBk4zxjegLIiKs=" />
</div>
</form>
将活动更改为。
$('form > div input[data-ignore-id]').submit(function(ev) {
ev.preventDefault();
var ignoreId = "request_" + $(this).find('input[data-ignore-id]').attr('data-ignore-id').toString();
ignore(ignoreId);
});
答案 1 :(得分:1)
这可能很有用
=link_to "value", "javascript:function()", class: 'btn btn-default'