2012-04-08 7 views
0

私は新しいものです、中国から来ました。私の英語は良くありません。私は私の質問を説明するために最善を尽くします。これを読んでいただきありがとうございます。私はそれらの「onclickの」イベントを監視したいChromeのように表示するにはどうすればいいですか?

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

: は、ここでは、2つの要素です。だから私はこのコードで試した:

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); 
} 

私は "Click1"と "Click2"を得ることができます。しかし、IE8では、それは私に "未定義"を与える。だから、それをChromeに表示する方法は?

答えて

0

attachEvent機能)、コールバックハンドラ内thisキーワードはありません:あなたは、あなたのHTMLファイル内のjQuery-ライブラリが含まれている場合 あなたは単にであなたの目標を達成することができます要素には、windowというオブジェクトがあります。だから、コード:thisはここウィンドウオブジェクトではなく、素子であるため

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

は、IEで動作しません。

あなたが好きな何かをする必要があります:サイドノートでは

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

を - あなたはIEのバージョンのサポートに低い行く必要がある場合、私は、第二のjQueryのようなフレームワークを使用することは、それははるかにはるかに簡単にイベント処理を行い(とりわけ)。

+0

お返事ありがとうございます。 –

2

可能であれば、jQueryのようなJSライブラリを使用することをお勧めします。古いIEのイベントモデルで

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

または「this.value」 – David

+0

ご回答いただきありがとうございます。この質問では、私はJQueryを使用して私の目標をより簡単に達成することができます。しかし、それは答えを得るのが面倒です。 –

関連する問題