【问题标题】:Not getting latest value from textBox未从 textBox 获取最新值
【发布时间】:2011-12-05 14:01:17
【问题描述】:

我正在尝试在 coffeescript/jquery 中实现以下内容

-> 当用户输入时,检查文本框是否为空(或有文本“写评论...”),隐藏“添加评论”按钮。否则显示“添加评论”按钮

但是,我面临一个问题,即从文本框返回给我的 val() 总是落后一个按键。

例如,如果我在框中输入“sad”,target.val() 只会返回“sa”。

如何在我键入时在文本框中获取最新的值?

我的实现如下

events:
  "keydown .comment_area": "commenting"

commenting: (e) ->
  target = @$(e.currentTarget)

  //target.val() is not returning me the latest character entered in the box
  if $.trim(target.val()) == "" or $.trim(target.val()) =="Write a comment..."
    //hide the 'add' button
    @$('.add_comment').hide()
  else
    //show the 'add' button
    @$('.add_comment').show()

【问题讨论】:

    标签: javascript jquery textbox coffeescript


    【解决方案1】:

    绑定到keyup 事件而不是keydown

    请参阅keyboard event order

    【讨论】:

    • 您也可以绑定到change 事件。如果您不关心为产生更改而按下的键,那可能是最好的。 (例如,请考虑右键单击并选择“粘贴”将修改文本框的值而没有 keydownkeyup。)[编辑:哎呀,nm,更改事件仅在 @ 上触发987654328@,它不会做你想要的。)
    • 修改我之前的评论:更好的解决方案是jQuery Text Change Event plugin
    • 为什么不使用 keypress 而不是 keyup?
    【解决方案2】:

    使用keyupkeypress 事件:keydown 在计算机实际将字符放入文本框之前触发,而其他两个在此之后触发:keypress 紧随其后,keyup当钥匙被物理抬起时。我认为keypress 会为插入文本框中的每个字符触发(即,当您按住并且字符重复时,它会单独触发),而keyup 仅在键被解除后触发,所以如果你要按住一个键,它只会在该键被抬起后触发,而不是针对插入的每个字符。

    顺便说一句,在coffeescript 中,函数调用不需要括号——只有当你没有传入任何参数时。例如:

    @$(e.currentTarget) -> @$ e.currentTarget

    $.trim(target.val()) -> $.trim target.val()

    另外,我注意到有时您使用@ 引用$,而有时您使用的是全局jQuery——这有什么原因吗?看来应该是一致的。

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 2011-03-19
      • 2020-07-26
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多