繁体   English   中英

无法验证用户输入-无法触发onkeyup事件

[英]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事件。

onkeyup事件处理程序函数需要采用一个参数:

element.onkeyup = function(evt) {

请参阅Mozilla文档

哎呀。 我忘记了页面标题中还有另一个ID为“ username”的文本框,允许人们登录。 显然,那里的验证工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM