我正在嘗試使整個div標記可點擊。我想使用的代碼如下,當我加入:remote => true與url_for,如何做到這一點?
:remote => true
位,它拋出參數過多錯誤,2 1
代碼:
<div id="foo" onclick="window.location = '<%= url_for foo_controller_path(:someparam => @left), :remote => true %>'"></div>
我正在嘗試使整個div標記可點擊。我想使用的代碼如下,當我加入:remote => true與url_for,如何做到這一點?
:remote => true
位,它拋出參數過多錯誤,2 1
代碼:
<div id="foo" onclick="window.location = '<%= url_for foo_controller_path(:someparam => @left), :remote => true %>'"></div>
url_for沒有按」 t接受: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綁定事件時,它傾向於更好地工作。
如果你希望能夠做我描述過什麼,但你在梁2的時候,你可以從這裏得到的Rails3中jQuery腳本:https://github.com/rails/jquery-ujs
請注意,您還需要這個腳本,如果你正在使用rails 3,並希望jquery而不是原型(像我一樣!)。默認情況下,Rails 3.1將捆綁jQuery而不是我聽到的原型。
並將該url_for中的:remote => true
更改爲"data-remote" => true
(對於導軌2,使用導軌3可以使用符號語法併爲您設置'data-remote'
屬性。
讓我知道,如果有什麼不工作,或者你需要澄清。或者即使你一直恨我的想法:p
這樣做的竅門,我會用你推薦的jQuery使用UJS。不幸的是,我必須使div可點擊,因爲它實際上不包含除使用javascript繪製的矢量圖像以外的其他任何內容。 – providence 2011-03-11 04:59:44