jQuery/CoffeeScript/Rails 不会在我的输入上调用 change()

jQuery/CoffeeScript/Rails doesn't call change() on my input

本文关键字:调用 change 输入 Rails CoffeeScript jQuery 我的      更新时间:2023-09-26

我有一个带有文本字段的表单,每当用户更改其文本时,我都会尝试执行操作:

<%= form_for @item do |f| %>
  <%= f.text_field :title, id: "edit_item_title" %>
  <%= f.submit 'Save' %>
<% end %>

在我的咖啡脚本文件中:

$(document).ready ->
  $('#edit_item_title').change ->
    alert("Changed!")

出于某种原因,不会触发 change() 事件。只是为了表明其他一切都在工作,这里有一些确实有效的代码,使用 keypress 而不是 change

$(document).ready ->
  $('#edit_item_title').keypress ->
    alert("Changed!")

我不能使用 keypress,因为它不考虑按下删除键的时间,并且我不能使用 keyup,因为每当按下箭头键时它都会触发。

我对此很陌生。任何解决方法或想法为什么会发生这种情况?谢谢!

更改事件在<input>失去焦点之前不会触发。从精细规格:

4.10.5.5 常见事件行为

[...]change 事件在提交值时触发,如果这对控件有意义,或者在控件失去焦点时触发。

因此,只需在<input type="text">中键入内容不会触发任何更改事件。

如果需要在键入时对键入的内容做出反应,则需要将keyupkeypresskeydown@value和键盘事件结合使用。使用哪一个取决于您需要做什么。

各种活动的演示:http://jsfiddle.net/ambiguous/hrrur2LL/2/

当更改事件失去焦点时,它会在输入字段上触发,您应该使用 keyup 并检测 keyCode 并做出相应的响应

$(document).ready ->
 skipKeys = [37, 38, 39, 40] # Arrow keys
 $('#edit_item_title').keyup (e)->
  if (skipKeys.indexOf(e.keyCode) == -1) # To skip keys
    alert('ok')