【问题标题】:Why does jQuery.change() only trigger when I leave the element?为什么 jQuery.change() 只在我离开元素时触发?
【发布时间】:2012-03-05 13:55:41
【问题描述】:

我有一个 textarea 元素,我想在输入时在 textarea 上方打印所写的字符数。 HTML 如下所示:

<p id="counter"></p>
<textarea id="text"></textarea>

和javascript:

jQuery( "#text" ).change( function(){
    var numberOfChars = jQuery( "#text" ).val().length;
    jQuery( "#counter" ).html( numberOfChars );
});

但是当我在文本区域之外单击时,计数器只会“更新”。这是为什么?我希望计数器在我写作时即时更新。

【问题讨论】:

  • 只是要注意这个行为是在哪里指定的:当控件失去输入焦点并且它的值在获得焦点后被修改时发生变化事件 w3.org
  • @lonesomeday 那么现在说得通了。 Tnx。

标签: javascript jquery charactercount


【解决方案1】:

这是更改事件的已知行为。在元素失去焦点之前它不会触发。 From the docs:

change 事件在元素值改变时发送到元素。这 事件仅限于元素、框和 元素。对于选择框、复选框和单选按钮,事件 当用户使用鼠标进行选择时立即触发, 但对于其他元素类型,事件被推迟到 元素失去焦点。

我会将脚本绑定到 keyup(您可以使用其他键事件,但 up 在这种情况下最有意义):

jQuery( "#text" ).keyup(function(){
    var numberOfChars = jQuery( "#text" ).val().length;
    jQuery( "#counter" ).html( numberOfChars );
});

【讨论】:

  • 嗯.. 这很简单。谢谢!但是你知道为什么 jQuery.change() 表现得像 onblur 而不是 onchange 吗?
  • 这是预期的行为。我已编辑我的答案以使其更完整
  • @MildFuzz 请避免使用链接缩短服务:没有必要这样做,所以它的作用就是混淆链接指向的位置。
  • 如果用户使用鼠标粘贴某些信息,keyup 不会触发
【解决方案2】:

尝试使用keyup 事件而不是更改。实际操作:http://jsfiddle.net/ren4A/1/

【讨论】:

    【解决方案3】:

    试试 .on('keyup') 或 .on('keypress') 或 .on('keydown')

    【讨论】:

      【解决方案4】:

      $('input#myId').bind('input', function() {
        //some code
      });
      

      它允许检测keyup事件,用鼠标粘贴数据......

      【讨论】:

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