我有以下的HTML代碼確定哪些元素調用事件
<input type="button" id ="b1" value="Click me" onclick="msg()" />
<input type="button" id="b2" value="Click me" onclick="msg()" />
現在
在我的javascript我想找出一個按鈕是否被點擊或按鈕2.我該怎麼辦呢?
我有以下的HTML代碼確定哪些元素調用事件
<input type="button" id ="b1" value="Click me" onclick="msg()" />
<input type="button" id="b2" value="Click me" onclick="msg()" />
現在
在我的javascript我想找出一個按鈕是否被點擊或按鈕2.我該怎麼辦呢?
如果你改變你的內嵌處理器使用.call()
方法,該功能的情況下設置爲this
:
<input type="button" id ="b1" value="Click me" onclick="msg.call(this)" />
...然後在你的函數,this
將代表接收事件的人。
function msg() {
alert(this.id);
}
否則,你可以通過this
作爲參數:
<input type="button" id ="b1" value="Click me" onclick="msg(this)" />
...和參考這樣的說法:
function msg(elem) {
alert(elem.id);
}
你不應該直接混合的JavaScript到您的帶有JavaScript屬性的HTML,如onclick
。您應該使用JavaScript以編程方式附加您的處理程序。在最簡單的:
function msg = function(evt){
// For old IE versions that don't pass in the event,
// get the global event object.
if (!evt) evt = window.event;
// Use currentTarget if available, target if not,
// and srcElement for old versions of IE
var receiver = evt.currentTarget || evt.target || evt.srcElement;
alert(receiver.id);
};
document.getElementById('b1').onclick = msg;
事件處理程序傳遞事件對象作爲自己的第一個參數(除了很老的IE版本,其中設置一個全局event
屬性)。
currentTarget
和target
屬性之間的區別與事件冒泡有關。如果某個事件發生在子元素上,但隨後冒泡到某個具有該事件處理程序的祖先,則currentTarget
屬性是子元素,target
屬性是具有事件處理程序的祖先。
IE的老版本沒有currentTarget
或target
性質,而是使用srcElement
意味着同樣的事情target
。現在,如果您將代碼中的事件處理程序直接添加到元素中(而不是使用冒泡),那麼您已經(在某個時間點)引用了該元素。因此,這裏的選擇,更先進的,但是,更簡單的方法:
var inputs = document.getElementsByTagName('input');
for (var i=0,len=inputs.length;i<len;++i){
if (inputs[i].type=='button'){
inputs[i].onclick = (function(i){
return function(){
alert(inputs[i].id);
}
})(i);
}
};
從閱讀答案/意見,我發現你正在使用的道場。你可以通過事件對象來引用它。我只在Chrome,FF和IE8測試這一點,但這個似乎工作:
templateString: "<div>" + '<button id="button1" dojoAttachEvent="onclick: msg">press me1</button><button id="button2" dojoAttachEvent="onclick: msg">press me2</button></div>',
msg:function(e){
alert(e.currentTarget.id);
}
我不能通過這個,我正在使用dojoattachevent將事件與事件處理程序關聯起來 – akshay 2010-12-21 04:24:19
@akshay:然後使用第一個例子,它不會傳遞'this'。你應該可以通過'onclick =「msg.call(this,event)''來傳遞'event'。 – user113716 2010-12-21 04:26:35
@akshay - 當然dojo代理事件或元素作爲上下文已經? – 2010-12-21 04:57:03