我正在使用best_in_place gem,因此我可以在索引视图中编辑多个学生。
但问题是,可用性很差。 我必须单击,键入信息,输入/单击并再次单击以编辑其他信息。
这是一种我可以按Tab键进入田野的方法吗?
以下是索引的代码:
<% @students.each do |student| %>
<tr>
<td><%= link_to .name, edit_student_path(student) %></td>
<td><%= best_in_place student, :oral %></td>
<td><%= best_in_place student, :writing %></td>
<td><%= best_in_place student, :participation %></td>
<td><%= best_in_place student, :grammar %></td>
<td><%= best_in_place student, :presence, type: :select, collection: [["Present", "Present"], ["Absent", "Absent"], ["", "-"]] %></td>
</tr>
<% end %>
我发现了这个:https://github.com/bernat/best_in_place/tree/master/lib/best_in_place
确定。 这就是我现在得到的,但仍然不起作用:/ 任何想法?
指数:
<td><%= best_in_place allan, :oral, :html_attrs => {:tabindex => 10} %></td>
<td><%= best_in_place allan, :writing, :html_attrs => {:tabindex => 11} %></td>
Users.js.coffee
jQuery ->
$('.best_in_place').best_in_place()
$ ->
$('span.best_in_place').focus ->
el = $(this)
el.click()
el.find(el.data('type')).attr('tabindex', el.attr('tabindex'))
答案 0 :(得分:5)
我认为你可以使用tabindex
HTML属性和focus
这样的事件来解决这个问题:
<td><%= best_in_place student, :oral, :html_attrs => {:tabindex => 10} %></td>
<td><%= best_in_place student, :writing, :html_attrs => {:tabindex => 11} %></td>
<td><%= best_in_place student, :participation, :html_attrs => {:tabindex => 12} %></td>
<td><%= best_in_place student, :grammar, :html_attrs => {:tabindex => 13} %></td>
<td><%= best_in_place student, :presence, type: :select, collection: [["Present", "Present"], ["Absent", "Absent"], ["", "-"]], :html_attrs => {:tabindex => 14} %></td>
和这个JS
$(function() {
$('span.best_in_place[data-html-attrs]').each(function() {
var attrs, el;
el = $(this);
attrs = el.data('html-attrs');
if (attrs && attrs['tabindex']) {
el.attr('tabindex', attrs['tabindex']);
}
}).focus(function() {
var el;
el = $(this);
el.click();
});
});
JS代码的最后一行是搜索BIP表单的元素类型并分配tabindex
,以便保持Tab键的顺序。
更新:以上JS的CoffeeScript版本
$ ->
$('span.best_in_place[data-html-attrs]').each ->
el = $(this)
attrs = el.data('html-attrs')
el.attr('tabindex', attrs['tabindex']) if attrs and attrs['tabindex']
.focus ->
el = $(this)
el.click()
答案 1 :(得分:1)
BIP改变了他们的命名结构。他们还包括一些tabindex支持。
通过gem github:
HTML选项:
如果您提供的选项不是明确的best_in_place选项 它将在创建best_in_place span时传递。
因此,例如,如果要添加HTML选项卡索引 best_in_place span只需将其添加到方法调用中:
<%= best_in_place @user, :name, tabindex: "1" %>
然而,我没有让它开箱即用(或根本没有)。我最终改变了Ahmad的JS解决方案,以符合新的命名结构。虽然通过:select
字段的标签仍然存在问题,但效果非常好。
$(function() {
$('span.best_in_place[data-bip-html-attrs]').each(function() {
var attrs, el;
el = $(this);
attrs = el.data('bip-html-attrs');
if (attrs && attrs['tabindex']) {
el.attr('tabindex', attrs['tabindex']);
}
}).focus(function() {
var el;
el = $(this);
el.click();
});
});
JS不是我的强项。如果有人对:select
下拉菜单有任何建议,请回复! THX