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

时间:2014-12-03 03:14:21

标签: javascript jquery html ruby-on-rails coffeescript

我有一个带有文字字段的表单,并且我试图在用户更改其文本时执行操作:

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

在我的coffeescript文件中:

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

出于某种原因,change()事件未被触发。只是为了表明其他一切正常,这里有一些代码可以使用keypress代替change

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

我无法使用keypress,因为在按下删除键时没有考虑到这一点,我无法使用keyup,因为无论什么时候它都会触发按下箭头键。

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

2 个答案:

答案 0 :(得分:2)

更改事件不会触发,直到<input>失去焦点。来自fine specification

  

4.10.5.5常见事件行为

     

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

只需在<input type="text">中输入内容即可触发任何更改事件。

如果您需要对键入内容的类型做出反应,那么您希望使用keyupkeypresskeydown组合使用@value和键盘事件。你使用哪一个取决于你需要做什么。

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

答案 1 :(得分:0)

当输入字段失去焦点时更改事件触发,您应该使用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')