对于因为之前被问过而被投票的好人:我的问题不是隐含的事件参数。我不知道。事件参数是答案,而不是问题。
function myEventHandler() {
var eventSrcType=(event.srcElement) ? event.srcElement.type : 'type undefined';
alert(eventSrcType);
}
当用户点击图像(“onclick”)时会调用该函数,例如
<a href="javascript:void(0)" onclick="myEventHandler();">
显然分配有问题,因为alert
永远不会被执行。这有什么不对?
(我尝试了window.event
,但Dreamweaver没有提醒event
成为window
的成员。无论如何,它也不起作用。
修改
所有答案暗示隐含传递event
。所以我添加了作为函数的参数(不带参数调用),
function myEventHandler(event) {
var eventSrcType=(event.srcElement) ? event.srcElement.type : 'type undefined';
alert(eventSrcType);
}
但我仍然没有得到警报。
传递this
作为参数显示“type undefined”,但我希望这里有锚类型。
答案 0 :(得分:6)
您在函数中缺少event
参数,因此您可能有一个空引用异常。
function myEventHandler(event) {
var eventSrcType=(event.srcElement) ? event.srcElement.type : 'type undefined';
alert(eventSrcType);
}
答案 1 :(得分:1)
event
变量未在任何地方定义。它通常作为第一个参数传递给事件回调,但它不包含在您的函数签名中。试试这个函数签名:
function myEventHandler(event) {
答案 2 :(得分:1)
以上所有答案都是正确的。您无法理解的是您必须将该事件对象传递给您使用它的函数。我检查了你的代码,你的点击处理程序是
function onclick(event) { showFS();}
但应该是function onclick(event) { showFS(event);}
答案 3 :(得分:0)
onclick中有一个隐含的事件参数
function myfunction(event)
{
console.log("srcElement " + event.srcElement);
}
IE前IE9没有通过它所以你需要检查窗口.event。
答案 4 :(得分:0)
除了没有指定event
参数之外,你的问题就是你附加eventlistener的方式。
您通过将元素的onclick属性设置为"myEventHandler()"
来附加您的点击事件处理程序,这很糟糕,因为
如果你遗漏了parens,只设置onclick="myEventHandler"
,你就不会再显示没有参数的功能。但它仍然是一个字符串值,必须对其进行评估才能获得对实际函数的引用。
您可能想要做的是通过EventTarget.prototype.addEventListener
,附加您的事件监听器,例如
var images = document.getElementsByTagName ("img");
[].forEach.call (images, function (img) {
img.addEventListener ("click", myEventHandler);
})
您的功能可能如下所示
function myEventHandler(event) {
var eventSrc = event.srcElement || event.target || {},
eventSrcType = eventSrc.type || "type undefined";
alert(eventSrcType);
}
答案 5 :(得分:-2)
HTML代码必须如下所示
<img onclick="myEventHandler(this)" />
JS:
function myEventHandler(event) {
var eventSrcType=(event.srcElement) ? event.srcElement.type : 'type undefined';
alert(eventSrcType);
}
你应该看到“未定义类型”。
根据您是否省略this
和/或event
,您会得到不同的结果。尝试每种组合,直到获得理想的结果。