2015-11-04 20 views
0

所以我有我的網頁上的多個複選框。我收集所有這些,如下面的代碼所示。我想將它傳遞給控制器​​Rails check_box_tag - 獲取所有值在視圖(哈姆)文件

= check_box_tag "names[]", ob.name, false, class: 'cbx' 

我能夠將它們與我的老代碼通過

%fieldset.actions 
    = form.submit "Upgrade", :class => 'button' 

日誌之前訪問數組的值:

處理通過SomeController#創建爲HTML參數: {「utf8」=>「✓」, 「names」=> [「ron」,「jacob」],「commit」=>「NameButton」}

好的。所以我想要訪問我的haml文件中的所有值。我提交表單之前是否有辦法,我可以訪問選中的複選框。

我想將名稱[]傳遞給我的控制器作爲參數。

=link_to script_name1, { :action => 'create', :names => 'dontknowhowtopassnames[]' }, :method => :post 

Rails的版本 - 3.2.17

+0

你可以用Javascript/jQuery。 [示例](http://stackoverflow.com/questions/9887360/check-if-checkbox-is-checked-javascript) – mmichael

+0

你能給更多的上下文嗎? –

+0

我需要將名稱[]傳遞給我的控制器作爲參數。我使用表單提交工作。但我必須改變這個邏輯。現在我將參數傳遞給我的控制器。但我不知道如何將名稱[]直接傳遞給我的控制器 –

回答

1

你可以做到這一點使用JavaScript。 確切的實現取決於正是你想要使用這些值做什麼,但你可以,例如,使用change事件跟蹤和維護所有檢驗值的數組:

/* 
* should properly init this array if some of your checkboxes are already 
* checked when the form is loaded 
*/ 
var names = []; 

$(document).ready(function() { 

    $(document).on('change', '.cbx', function() { 
    var name = $(this).val(); 
    var idx = names.indexOf(name); 
    if ($(this).prop('checked') && idx === -1) { 
     names.push(name); 
    } else if (!($(this).prop('checked')) && idx >= 0) { 
     names.splice(idx, 1); 
    } 
    }); 

}); 

更新與補充回答:

提交表單的鏈接,而不是一個按鈕:

在您看來,更換

%fieldset.actions 
    = form.submit "Upgrade", :class => 'button' 

= link_to "Submit", "#", :class => 'submit_link' 

然後,在JavaScript中添加$(document).ready體內的以下內容:

$(document).on('click', 'a.submit_link', function(e) { 
    $(this).closest('form').submit(); 
    e.preventDefault(); 
}); 

就是這樣。如果您嘗試自行對錶單數據進行序列化,您的生活會變得非常複雜,而表單的submit()方法可以爲您處理。你可以可以自己序列化數據,它有時很有用,例如,當處理AJAX時,但在你的情況下,默認submit()是完美的工作。

+0

謝謝jaxx。有沒有什麼方法可以查看我的haml文件中的值。我需要將名稱[]作爲參數傳遞給我的控制器。 –

+0

對不起,Anish,我不明白。您已將所選名稱作爲數組傳遞給您的控制器,因爲您發佈的日誌顯示: SomeController處理#以HTML格式創建參數:{「utf8」=>「✓」,**「names」=> 「ron」,「jacob」] **,「commit」=>「NameButton」} – Jaxx

+0

至於查看和更新​​頁面上選定的名稱,因爲框被選中/取消選中,這很容易實現,如果這就是你想要的去做。 – Jaxx