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

时间:2014-01-30 05:16:34

标签: 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

然后在我的控制器中我有

def new
    @student = Student.new
    @student.student_classes.build.build_class
end

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

has_many :student_classes
has_many :classes, through: :student_classes
accepts_nested_attributes_for :student_classes

在我的StudentClass模型中,我有

belongs_to :student
belongs_to :class
accepts_nested_attributes_for :class

最后在我的班级模型中我有

has_many :student_classes
has_many :students, through: :student_classes

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

更新

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

1 个答案:

答案 0 :(得分:0)

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

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

或者如果您更喜欢coffeescript:

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

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

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