我有一个带有文字字段的表单,并且我试图在用户更改其文本时执行操作:
<%= 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
,因为无论什么时候它都会触发按下箭头键。
我对此很陌生。任何解决方法或想法为什么会发生这种情况?谢谢!
答案 0 :(得分:2)
更改事件不会触发,直到<input>
失去焦点。来自fine specification:
4.10.5.5常见事件行为
[...]
change
事件在提交值时触发,如果这对控件有意义,或者当控件失去焦点时触发。
只需在<input type="text">
中输入内容即可触发任何更改事件。
如果您需要对键入内容的类型做出反应,那么您希望使用keyup
,keypress
或keydown
组合使用@value
和键盘事件。你使用哪一个取决于你需要做什么。
答案 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')