【问题标题】:javascript\jquery: Event that fires when textbox changesjavascript\jquery:文本框更改时触发的事件
【发布时间】:2011-11-02 13:54:10
【问题描述】:

我正在寻找一个 jquery/simple javascript(不是其他库)解决方案,它将一个事件设置为一个文本框,当文本框被更改时将触发? (不是在模糊之后)
无论如何更改(键盘字符键/制表符/回车键或鼠标粘贴),我都需要它触发,而且我只需要触发一次。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

很遗憾,没有。总有一天,所有浏览器都支持textinput event 和/或HTML5 input event,但目前并非所有浏览器都支持have various bugs。您可以使用事件组合,但您必须自己处理对每个更改的响应一次,并且总是有可能无法在某个地方覆盖某些浏览器。

因此,如果您绝对必须这样做,则必须每 N 毫秒轮询一次 value 属性。 (选择您满意的最大数字,以避免浏览器工作过于费力,并确保计时器函数中的代码尽可能紧凑和快速 - 例如,不要重新- 每次查找元素,查找一次并保留对它的引用。)

【讨论】:

  • 是的,有:HTML5 input 事件。 stackoverflow.com/questions/5519936/jquery-keyboard-events/…。适用于除 IE propertychange 事件。
  • @TimDown:您应该将其发布为答案。 :-) 我知道我忘记了什么。但不幸的是,各种浏览器have various bugs 都支持input 事件。目前,我认为轮询仍然是唯一真正可靠的机制。希望这会在未来几年内有所改变。
  • SO(系统和版主)最近告诉我不要发布基本上只是指向其他答案的链接的答案,所以我已经停止这样做了。关于这些问题,只有 IE 退格/删除键对我来说似乎很严重,但可以通过一些键检测来缓解。
  • @TimDown:啊,是的,那个。不要让我开始。上帝保佑他们应该让像你一样见多识广、乐于助人和聪明的人就如何最好地帮助人们做出自己的决定。
【解决方案2】:

你可以绑定keyup事件。

$("textarea").bind("keyup", function() {
    // Fires after the user has typed
});

见:http://jsfiddle.net/AWUbu/1/

【讨论】:

  • 忽略鼠标事件和按键重复。
【解决方案3】:

除了另一个答案中概述的bind 方法,您还可以这样做:

$("#txtTest").keyup(function(){
    alert($(this).val());
});

【讨论】:

    【解决方案4】:
    var obj = document.getElementById("field");
    var func= function(){
        alert('hi');
    }
    
    obj.onkeypress= func;
    obj.onclick = func;
    obj.on... = func;
    

    【讨论】:

    • 他说他想要它主动,而不是模糊。 change 在用户退出该字段之前不会被触发。
    【解决方案5】:

    您可以使用 jQuery keydown 或 keyup。

    var target = jQuery('#id');
    target.keydown( function () { alert('hi'); } );
    

    现在,既然你只想被调用一次,你所要做的就是在它被调用后立即解除绑定:

    target.keydown( function () { alert('hi'); target.unbind('keydown'); } );
    

    【讨论】:

    • 剪贴板中的鼠标粘贴怎么办?
    • @DarinDimitrov 作为专家,您有更好的解决方案吗?
    • @gdoron,我不是专家。 T.J. Crowder's answer 看起来是迄今为止最好的。
    • 鼠标从剪贴板粘贴,嗯,我猜你可以对鼠标和键盘使用 .change() 案例,但我不记得它是在模糊还是在内容的实际更改时触发
    • 另外,有人可以从浏览器工具栏(编辑>粘贴)粘贴一些东西,所以 T.J.到目前为止,克劳德的答案看起来最准确。
    【解决方案6】:

    我用过 T.J. Crowders 的回答并想出了这个代码:

    (function() {
    setInterval(function() {
        var validated = false;
        if ($('#mytextinput').val() !== '' && validated === false) {
            // perform validation or whatever you need
    
            validated = true;
        }
        else {
            validated = false;
        }
    }, 500);
    })();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2020-09-08
      • 2010-11-01
      • 1970-01-01
      相关资源
      最近更新 更多