最后更新:
我发现了问题所在.我正在运行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)
你能给予的任何帮助都会很精彩.这是我遇到的一个非常奇怪的问题.
更新:
我发现它只是接受没有退格的浮动的输入.如果它接受一个字符串,那么它工作正常.
您可以使用 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。
啊,跨浏览器互操作性的温暖而模糊的世界......