【问题标题】:jQuery/CoffeeScript/Rails doesn't call change() on my inputjQuery/CoffeeScript/Rails 没有在我的输入上调用 change()
【发布时间】:2015-01-31 12:03:20
【问题描述】:

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

<%= 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,因为它会在按下箭头键时触发。

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

【问题讨论】:

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


    【解决方案1】:

    &lt;input&gt; 失去焦点之前不会触发更改事件。来自fine specification

    4.10.5.5 常见事件行为

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

    因此,只需在 &lt;input type="text"&gt; 中输入内容不会触发任何更改事件。

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

    各种事件的演示:http://jsfiddle.net/ambiguous/hrrur2LL/2/

    【讨论】:

      【解决方案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')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多