因此,我在文本框的onchange事件上有一个AJAX调用,在onkeyup事件上有一个非常简单的掩码函数(向SSN添加破折号)。这两个函数本身都工作得很好,但是,如果掩码插入了一个破折号,然后我移出了文本框,onchange事件将不会触发。
有人知道为什么吗?我的猜测是,通过使用掩码函数更改值,文本框不再认为发生了任何更改。
谢谢
SSN: <input id="SSN" maxlength="11" size="8" onchange="validateSSN();" onkeyup="mask()">
<span id="SSNnote"></span>
<script type="text/javascript">
function validateSSN(){
var cfc = new myajax();
cfc.setCallbackHandler(function(AjaxResults) {UpdateValidationNotes('SSNnote', AjaxResults);});
cfc.ValidateSSN(document.getElementById("SSN").value);
}
function mask(){
var temp = document.getElementById("#WhichName#").value;
var e = window.event;
if (e.keyCode == 189){
document.getElementById("SSN").value = temp.substring(0,temp.length-1);
return false;
}
if ( temp.length == 3 || temp.length == 6)
if (e.keyCode != 8)
document.getElementById("SSN").value = document.getElementById("SSN").value + '-';
}
发布于 2011-03-23 14:34:37
是的,你是对的,如果你使用javascript改变框的值,onchange
将不会触发。因此,您需要在mask
-function中手动调用validateSSN()
。
发布于 2011-07-27 05:49:23
JavaScript函数:
<script type="text/javascript">
function mask(str, textbox, loc, delim) {
var locs = loc.split(',');
for (var i = 0; i <= locs.length; i++) {
for (var k = 0; k <= str.length; k++) {
if (k == locs[i]) {
if (str.substring(k, k + 1) != delim) {
str = str.substring(0, k) + delim + str.substring(k, str.length)
}
}
}
}
textbox.value = str
}
</script>
在body标签中编写以下代码:
<label class="label">Social Security Number: *</label>
<input type="text" size="15" name="social_security_number" class="input"
id="txtsocial_security_number" runat="server"
onKeyUp="javascript:return mask(this.value,this,'3,6','-');"
onBlur="javascript:return mask(this.value,this,'3,6','-');" maxlength="11">
这将导致以下格式: 797-97-9797
https://stackoverflow.com/questions/5406777
复制相似问题