假設我有一個包含選擇列表中的香草形式和一個提交按鈕:如何使用平變化觸發選擇用不顯眼的jQuery
<%= form_for(@report :url => report_path) do |f| %>
<%= f.select(:sort_by, options_for_select(Report.SORT_OPTIONS, @report.sort_by)) %>
<%= f.submit 'sort' %>
<% end %>
工作正常,但用戶必須首先做一個選擇,然後點擊'排序'。我真正喜歡的是在用戶進行選擇並將「排序」按鈕完全丟棄時觸發該動作。這對於不引人注意的jQuery來說就像是一個完美的用例。所以[基於從@Dennis反應和下面@ethan]
,在此之前我form_for
說:
<%= javascript_include_tag(:defaults) %>
<script type="text/javascript">
$(document).ready(function() {
var $select = $('#report_sort_by'),
$form = $select.closest('form');
// $('[type="submit"]', $form).attr('type', 'hidden'); // gives error
$('[type="submit"]', $form).hide(); // works
$select.change(function() { $form.submit(); });
});
</script>
因此,它是正確的考慮一擲的JavaScript右轉入.html.erb文件?還是把它放在一個單獨的.js文件中更好?如果是這樣,那麼用於參數化和命名.js文件的約定是什麼?
對於一些聲望點,有人可以告訴我和所有其他tyros如何做到這一點?
酷豆 - 我可以看到生成的#report_sort_by標記和所有。但是爲了顯示我的無知深度:您是否將該.js代碼放在public/javascripts/application.js中,然後在視圖中放入'<%= javascript_include_tag(「/ javascripts/application.js」)%>'你想要它?或者有更清晰的方法嗎? –
順便說一句,'$('[type =「submit」]',$ form)。attr('type','hidden');'給我一個錯誤:'未捕獲的類型屬性無法更改',儘管它在我將其更改爲簡單隱藏時起作用,如'$('[type =「提交「]',$ form).hide()'。查看編輯原始帖子獲取更多信息... –
感謝您對錯誤的提示。我在我的答案中改變了這一點。你把代碼放在哪裏主要是哲學的,而且對於這個小代碼片段來說非常理想。你把它放在application.js中的解決方案是好的(比把它放到.erb或.rhtml文件中,至少對於任何實際大小的JS代碼來說都是如此),儘管我可能會說application.js應該只有代碼是全局的,因爲這段代碼的目標是一個選擇菜單的特定ID,它可能只存在於一個頁面上,那麼它並不屬於這個特定的頁面。 – ethan