使用javascript管理元素事件

使用javascript管理元素事件,javascript,html,Javascript,Html,我有一个简单的HTML文本框,里面有几个事件,比如onfocus change background color、onkeypress确保只接受数字、onblur格式化并验证数字是否为us phone格式、onmouseover显示工具提示、onmouseout隐藏工具提示等 我希望动态管理所有事件,而不使用任何第三方库,如prototype、jQuery、Dojo等。。我的浏览器只有IE 6及以上版本。没有火狐。 我希望标签下的代码如下 并在标签下编写如下代码 document.getElem

我有一个简单的HTML文本框,里面有几个事件,比如onfocus change background color、onkeypress确保只接受数字、onblur格式化并验证数字是否为us phone格式、onmouseover显示工具提示、onmouseout隐藏工具提示等

我希望动态管理所有事件,而不使用任何第三方库,如prototype、jQuery、Dojo等。。我的浏览器只有IE 6及以上版本。没有火狐。 我希望标签下的代码如下 并在标签下编写如下代码

document.getElementByID('usphone').onfocus= ChangeBackgroudColor();
document.getElementByID('usphone').onkeypress= return isNaN();
document.getElementByID('usphone').onblur= formatUSPhone();validateUsPhone();ChangeColor();
document.getElementByID('usphone').onmouseover= showtooltip();
document.getElementByID('usphone').mouseout= hidetooltip();

虽然我不同意不使用第三方库,但如果你的工具提示中没有链接,你可以试试这个

HTML

IE有attachEvent方法来注册事件处理程序。用法是

Object.attachEvent(eventName, method);
其中eventName是OneEvent形式的字符串,method是对要调用的javascript函数的引用。处理程序方法将接收1个参数,即事件对象

对于你的情况,你会

var phoneInput = document.getElementByID('usphone');
phoneInput.attachEvent('onfocus', ChangeBackgroudColor);  
phoneInput.attachEvent('onkeypress', function(e) { return isNaN(e.srcElement.Value); });
phoneInput.attachEvent('onblur', function (e) {
    formatUSPhone();
    validateUsPhone();
    ChangeColor();
});
// TODO onmouseover, onmouseout
请注意,函数引用不包括括号,因为此时传递的是引用,而不是执行函数。此外,如果将多个处理程序注册到同一个元素,则执行顺序不受保证。如果您需要函数以特定的顺序执行,就像您为onblur指定的那样,您可以将这些调用封装在匿名函数中


IE包含对event.srcelelement中触发事件的元素的引用。

为什么不想使用第三方库。重新发明轮子是没有意义的。如果你真的想坚持IE,你就可以考虑HTC并给脚本分配一个行为。除此之外,我假设您只是在寻找代码审查?看来你走对了方向。您可能需要将您的文本框提供给isNaN,以便它知道要检查哪个文本框。或者将isNaN函数添加到文本框原型。等
Object.attachEvent(eventName, method);
var phoneInput = document.getElementByID('usphone');
phoneInput.attachEvent('onfocus', ChangeBackgroudColor);  
phoneInput.attachEvent('onkeypress', function(e) { return isNaN(e.srcElement.Value); });
phoneInput.attachEvent('onblur', function (e) {
    formatUSPhone();
    validateUsPhone();
    ChangeColor();
});
// TODO onmouseover, onmouseout