这个javascript语句出了什么问题?

时间:2013-11-26 13:03:56

标签: javascript events

对于因为之前被问过而被投票的好人:我的问题不是隐含的事件参数。我不知道。事件参数是答案,而不是问题。


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”,但我希望这里有锚类型。

6 个答案:

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

http://javascript.info/tutorial/obtaining-event-object

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,您会得到不同的结果。尝试每种组合,直到获得理想的结果。