值更改时的javascript文本框调用事件

Sen*_*lez 4 javascript-events

我有一个文本框,每当框的值发生变化时,我想检查并查看是否输入了20位数字.

我以为我会使用onChange事件,但这似乎被解释为IE上的onBlur事件.

所以我想我会使用onKeyDown,但是如果用户想要将值粘贴到字段中,则会出现问题,然后函数永远不会被调用.

没有其他形式的盒子,所以我不能依靠onBlur或期望他们将永远改变焦点.

我该怎么做呢?

我只是想在每次文本框的值发生变化时评估文本框的值.

<input type="text" onKeyDown="myfunction()">
Run Code Online (Sandbox Code Playgroud)

And*_*y E 10

一个有效的方法是使用一个组合onkeydownonpaste,这将在IE,火狐,Chrome和Safari工作.Opera在这里是奇怪的,因为它不支持onpaste所以你可能不得不回到onchangeOpera或使用DOMAttrModified变异事件,见下面的例子.

Internet Explorer也支持onpropertychange,每次属性更改元素时都会触发 - 包括value.我读过DOMAttrModifiedOpera和Safari支持(不确定Firefox),所以你可以将它与IE onpropertychange(未经测试)结合使用:

if ("implementation" in document &&
                   document.implementation.hasFeature('MutationEvents','2.0'))
    myInput.addEventListener("DOMAttrModified", valueChanged, false);    
else if ("onpropertychange" in myInput)
    myInput.onpropertychange = valueChanged;

function valueChanged (evt)
{
    var attr;
    evt = evt || window.event;
    attr = evt.attrName || evt.propertyName;

    if (attr == "value")
        validate();
}
Run Code Online (Sandbox Code Playgroud)