2010-05-13 55 views
4

我有一个文本框,只要框的值发生变化,我想检查并查看是否输入了20位数字。javascript textbox call value when value changes

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

然后我想我会使用onKeyDown,但问题出现在用户想要将值粘贴到字段中时,函数永远不会被调用。

有没有其他的表格框,所以我不能依靠onBlur或期望他们会改变焦点。

我该怎么做?

我只是想每次更改文本框的值时评估文本框的值。

<input type="text" onKeyDown="myfunction()"> 

回答

10

一个有效的方法是使用onkeydownonpaste组合,这将在IE,火狐,Chrome浏览器和Safari。歌剧在这里是奇怪的,因为它不支持onpaste,因此您可能必须回退到Opera的onchange或使用DOMAttrModified突变事件,请参阅下面的示例。

Internet Explorer还支持onpropertychange,每当元素上的属性发生更改时都会触发 - 包括value。我已阅读,DOMAttrModified由Opera和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(); 
} 
0

使用onKeryPress事件

<input type="text" onKeyDown="CountText(this,200)" onpaste="return false;"> 

    function CountText(field, maxlimit) 
    { 
     if (field.value.length < maxlimit) // if too long...trim it! 
     { 
      return true; 
     } 
     else 
      return false; 
    } 

检查我的全部文章:http://www.codeproject.com/KB/validation/MyTextBox.aspx

+0

'keydown'和'keypress'不一样。选一个。如果你想要大多数关键事件,'keyup'会是最好的,但不需要知道密钥何时重复(当密钥最终被发布时你会得到通知)。如果您需要立即识别更改,请使用'keydown'。 'keypress'忽略非打印键,如退格键。 – Zenexer 2013-09-17 06:08:37

0
<script> 

function multy(val) 
{ 
alert(val.value+"--"+val.id); 
} 

</script> 
</head> 
<body> 
<input id="txtdemo" type="text" onchange="multy(this);"></br> 
<input id="txtdemo" type="text" onchange="multy(this);"> 
</input> 
</body> 

Click to see out put screen.

谢谢.. 。:)