2010-12-21 73 views
2

我有以下的HTML代碼確定哪些元素調用事件

<input type="button" id ="b1" value="Click me" onclick="msg()" /> 
<input type="button" id="b2" value="Click me" onclick="msg()" /> 
現在

在我的javascript我想找出一個按鈕是否被點擊或按鈕2.我該怎麼辦呢?

回答

4

如果你改變你的內嵌處理器使用.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); 
} 
+0

我不能通過這個,我正在使用dojoattachevent將事件與事件處理程序關聯起來 – akshay 2010-12-21 04:24:19

+0

@akshay:然後使用第一個例子,它不會傳遞'this'。你應該可以通過'onclick =「msg.call(this,event)''來傳遞'event'。 – user113716 2010-12-21 04:26:35

+0

@akshay - 當然dojo代理事件或元素作爲上下文已經? – 2010-12-21 04:57:03

1

讓你的msg()函數接受一個對象。然後當你調用它,傳遞

msg(this); 
+0

感謝:應該是什麼味精 – akshay 2010-12-21 04:07:07

+0

的身體味精函數內部我怎樣才能確定是否按鈕1/2被點擊了? – akshay 2010-12-21 04:08:00

+0

如果您的參數名稱是o,請執行o。id – 2010-12-21 04:09:43

0

你不應該直接混合的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屬性)。

currentTargettarget屬性之間的區別與事件冒泡有關。如果某個事件發生在子元素上,但隨後冒泡到某個具有該事件處理程序的祖先,則currentTarget屬性是子元素,target屬性是具有事件處理程序的祖先。

IE的老版本沒有currentTargettarget性質,而是使用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); 
    } 
}; 
1

從閱讀答案/意見,我發現你正在使用的道場。你可以通過事件對象來引用它。我只在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); 
} 

Live example

+0

不需要使用Dojo模板。即使您使用的是Dojo,也可以使用HTML的onclick事件參數。 – peller 2010-12-22 19:46:51

+0

我對Dojo不是很熟悉,但是如果OP使用'dojoAttachEvent'來使用模板系統的話。所以我用這個方式來演示。 – subhaze 2010-12-22 19:50:37

相關問題