我有以下的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