0

私は新しい人で、中国から来ました。私の英語は上手ではありません。私の質問を説明するために最善を尽くします。これを読んでいただきありがとうございます。ここに2つの要素があります:

<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ライブラリを使用することをお勧めします。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);
};

thisここではウィンドウオブジェクトであり、要素ではないため、IEでは機能しません。

次のようなことをする必要があります。

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

ちなみに、IEバージョンのサポートを低くする必要がある場合は、jQueryのようなフレームワークを使用すると、イベント処理がはるかに簡単になります(とりわけ)。

于 2012-04-08T18:48:55.707 に答える