2010-05-13 221 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.

謝謝.. 。:)