[英]Unable to validate user input - onkeyup event not firing
我没有收到Javascript错误,但是代码没有任何作用...
function registerValidator(target, validator) {
var element = document.getElementById(target);
if (element) {
var validationID = element.id + "_validationResult";
var validationSpan = document.createElement('span');
validationSpan.id = validationID;
element.parentNode.appendChild(validationSpan);
element.onkeyup = function() {
var result = validator(element);
if (result.ok) {
validationSpan.innerHTML = '<img src="/media/valid.gif" width="12" />';
} else {
validationSpan.innerHTML = '<img src="/media/invalid.gif" width="12" />';
if (result.message) {
validationSpan.innerHTML += '<br />' + result.message;
}
}
};
alert(1);
}
}
window.onload = function() {
registerValidator('username', function(element) {
var result = new Object();
alert('validate');
if (element.value.length >= 4) {
result.ok = true;
}
else {
result.ok = false;
result.message = "Too short";
}
return result;
});
alert(2);
}
正确触发了两个警报(1和2),但从未触发“验证”警报。 该函数用于以下元素:
<input type="text" name="username" id="username" />
我已经在Google Chrome,Firefox 3和Internet Explorer 8中进行了尝试。
这里一切都很好。 请参阅http://ashita.org/StackOverflow/validator.html上的测试页
您当前正在使用element.onkeyup,它可能会被另一个脚本破坏。
尝试使用
if (element.addEventListener)
element.addEventListener("keyup", validator,false);
else if (element.attachEvent)
element.attachEvent("onkeyup", validator);
参考文献:
您的元素看起来格式不正确。 您实际上在id =之后加了三个引号吗?
我认为脚本没有问题。 我有以下html在IE8和FF中与您的脚本完美兼容,
<html>
<script>
function registerValidator(target, validator) {
var element = document.getElementById(target);
if (element) {
var validationID = element.id + "_validationResult";
var validationSpan = document.createElement('span');
validationSpan.id = validationID;
element.parentNode.appendChild(validationSpan);
element.onkeyup = function() {
var result = validator(element);
if (result.ok) {
validationSpan.innerHTML = '<img src="/media/valid.gif" width="12" />';
} else {
validationSpan.innerHTML = '<img src="/media/invalid.gif" width="12" />';
if (result.message) {
validationSpan.innerHTML += '<br />' + result.message;
}
}
};
alert(1);
}
}
window.onload = function() {
registerValidator('username', function(element) {
var result = new Object();
alert('validate');
if (element.value.length >= 4) {
result.ok = true;
}
else {
result.ok = false;
result.message = "Too short";
}
return result;
});
alert(2);
}
</script>
<body>
<input type="text" id="username" name="username"/>
</body>
</html>
可能还有其他脚本试图修改元素的onkeyup事件处理程序。
我已经在本地的Chrome和IE8中对其进行了测试,并且效果很好。 您没有在代码的其他位置设置window.onload事件吗? 如何加载其他库,例如JQuery或Prototype?
如果您什么都没收到,我希望有什么东西可以覆盖onload或onkeyup事件。
哎呀。 我忘记了页面标题中还有另一个ID为“ username”的文本框,允许人们登录。 显然,那里的验证工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.