退格键不能以复杂关联的形式工作

moo*_*e18 5 ruby-on-rails

最后更新:

我发现了问题所在.我正在运行linux,在它上面你不能使用退格键返回我喜欢做的事情.所以我有一个扩展运行导致此错误.我不确定这是否是一个破坏它的更新,因为我不记得曾经有过这个问题.

更新2:

所以我发现在我的应用程序的任何地方都有一个数字输入表单时,这不起作用.它只在Chrome上执行此操作.

原版的:

所以我有一个表单接受复杂的"丰富"连接的属性.或者"has_many through:"加入.当我进入一个输入字段时,说"97.8"并通过点击退格键将其更改为7,而不是使用浏览器的后页.我创建的任何其他正常形式都可以.

以下是我的表格

= simple_form_for @student do |f|
  = f.fields_for :student_classes do |ff|
    = f.input :grade
    = f.association :class
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中我有

def new
    @student = Student.new
    @student.student_classes.build.build_class
end
Run Code Online (Sandbox Code Playgroud)

在我的学生模型中,我有:

has_many :student_classes
has_many :classes, through: :student_classes
accepts_nested_attributes_for :student_classes
Run Code Online (Sandbox Code Playgroud)

在我的StudentClass模型中,我有

belongs_to :student
belongs_to :class
accepts_nested_attributes_for :class
Run Code Online (Sandbox Code Playgroud)

最后在我的班级模型中

has_many :student_classes
has_many :students, through: :student_classes
Run Code Online (Sandbox Code Playgroud)

你能给予的任何帮助都会很精彩.这是我遇到的一个非常奇怪的问题.

更新:

我发现它只是接受没有退格的浮动的输入.如果它接受一个字符串,那么它工作正常.

Tyl*_*ler 0

您可以使用 javascript 将事件处理程序附加到退格键(代码为8),然后在按下时执行您想要的操作。在您的情况下,您需要另外过滤 keydown 是否发生在输入字段内:

$(document).on("keydown", function (e) {
  if (e.which === 8 && $(e.target).is("input, textarea")) {
    e.preventDefault();
    <do whatever you want>
  }
});
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢咖啡脚本:

$(document).on "keydown", (e) ->
  if e.which is 8 and $(e.target).is("input, textarea")
    e.preventDefault()
    <do whatever you want>
    return
Run Code Online (Sandbox Code Playgroud)

您可以更改选择器input, textarea以匹配您需要的输入的类型、类或 ID。

啊,跨浏览器互操作性的温暖而模糊的世界......