2012-04-08 71 views
0

我是新來的,來自china.My英語不好。我會盡我所能解釋我的問題。謝謝您閱讀此篇。 這裏有兩個要素:如何讓它在Chrome中顯示?

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

我想監視者的「點擊」事件。所以我試着用這段代碼:

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一樣顯示呢?

回答

0

在舊IE事件模型(attachEvent功能),回調處理器內部的this關鍵字不是綁定事件的元素,它是window對象。因此,代碼:

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

不會在IE瀏覽器,因爲this是這裏的窗口對象,而不是元素。

你需要做的是這樣的:

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

在一個側面說明 - 我第二次使用像jQuery框架,如果你需要去低版本IE支持的,它使事件處理更加容易得多(除其他事項外)。

+0

非常感謝您的回覆。我明白了。 – 2012-04-09 03:35:46

2

如果可能的話,我建議您使用像jQuery這樣的JS庫。 如果您在您的HTML文件的jQuery的圖書館,你可以實現你的目標簡單地:

$("input").click(function(){ 
    alert($(this).val()); 
} 
+0

或'this.value' – David 2012-04-08 18:49:59

+0

謝謝您的回覆。在這個問題上,我可以通過使用JQuery更輕鬆地實現我的目標,但它會失去獲取答案的樂趣。 – 2012-04-09 03:45:16

相關問題