我正在努力使整个div标签可点击。我试图使用的代码如下,当我添加
时:remote => true
它会抛出太多的args错误,2为1。
代码:
<div id="foo" onclick="window.location = '<%= url_for foo_controller_path(:someparam => @left), :remote => true %>'"></div>
答案 0 :(得分:4)
url_for不接受:remote => true
参数,通常是您将其发送到的link_to
方法。
您是否有理由不能使用<div>
链接?对于所有意图和目的,它作为一个链接,所以你应该这样标记,我们称之为语义标记。
如果你真的想这样做,最好使用jquery(或原型,如果那是你的一杯茶)来不引人注意地执行动作...它也使得更容易做到ajax请求。您是在点击链接后尝试更新页面上的内容,还是什么都不做?
此外,'window.location'是告诉页面上的javascript以进行重定向。如果您想远程发出请求,则不会使用它。
使用jquery你可以这样做,如果你想坚持div
%(function(){
$('#foo').click(function(){
$.get(
url: $(this).data('request-path'),
success: function(data){
alert('success sir! controller responded with ' + data);
}
);
});
});
在你看来使用它:
<div id='foo' data-request-path='<%= url_for foo_controller_path(:someparam => @left) %>'></div>
但如果您将其更改为链接标记,则可以执行此操作...
= link_to("", url_for(foo_controller_path(:someparam => @left)), :remote => true, :id => 'foo')
它应该只是工作。然后,您可以按照尝试设置div标签样式的方式设置此链接的样式。
这是更多语义和更少的代码供您担心。如果你之后需要在dom中更新一些东西,你可以添加这个jquery(如果你使用的是jquery和rails3):
$('#foo').bind('ajax:success', function(data){
alert('successful request! data was: ' + data);
});
我没有必要测试所有,但它应该是一个很好的起点...我不是将onclick处理程序放入标签的忠实粉丝。使用jquery绑定事件时,它往往更好用。
如果您希望能够执行我所描述的但您在rails 2中,您可以从此处获取rails3 jquery脚本:https://github.com/rails/jquery-ujs
请注意,如果您使用的是rails 3并且想要jquery而不是原型(就像我一样!),那么您还需要该脚本。默认情况下,Rails 3.1将与jquery捆绑,而不是我听到的原型。
并将该url_for中的:remote => true
更改为"data-remote" => true
(对于rails 2,使用rails 3,您可以使用符号语法,并为您生成'data-remote'
属性。
如果某些内容不起作用或您需要澄清,请告诉我。或者即使你完全讨厌我的想法:p