0

我是新来的,来自中国。我的英语不好。我会尽力解释我的问题。谢谢您阅读此篇。这里有两个要素:

<input type="button" value="Click1"/>
<input type="button" value="Click2"/>

我想监视那些的“onclick”事件。所以我尝试了这段代码:

function EventUtil(){}

EventUtil.prototype = {
constructor:EventUtil,

addHandler: function (element, type, handler) {
    if (element.addEventListener) {    //DOM2
        element.addEventListener(type, handler, false);
    } else if (element.attachEvent) {    //IE
        element.attachEvent("on" + type, handler);
    } else {      //DOM0
        element["on" + type] = handler;
    }

}};

var eventUtil = new EventUtil();
var buttons = document.getElementsByTagName("input");
for(var i = 0;i<buttons.length;++i) {

   var func = function () {
       alert(this.value);
   };
   eventUtil.addHandler(buttons[i], "click", func);
}

在 Chrome 中,我可以获得“Click1”和“Click2”。但在 IE8 中,它给了我“未定义”。那么如何让它像在 Chrome 中那样显示呢?

4

2 回答 2

2

如果可能的话,我建议你使用像jQuery这样的 JS-Library 。如果您在 HTML 文件中包含 jQuery-Library,您可以通过以下方式实现您的目标:

$("input").click(function(){
    alert($(this).val());
}
于 2012-04-08T15:52:52.230 回答
0

在旧的 IE 事件模型(attachEvent函数)中,this回调处理程序中的关键字不是绑定事件的元素,而是window对象。所以代码:

var func = function () {
    alert(this.value);
};

在 IE 中不起作用,因为this这里是窗口对象,而不是元素。

您需要执行以下操作:

var func = (function(elem) {
   return function() {
       alert(elem.value);
   };
}(buttons[i]));

附带说明 - 如果您需要降低 IE 版本支持,我第二次使用像 jQuery 这样的框架,它使事件处理变得更加容易(除其他外)。

于 2012-04-08T18:48:55.707 回答