什么'这个javascript语句错了

What's wrong with this javascript statement?

本文关键字:javascript 语句 错了 这个 什么      更新时间:2023-11-09

对于那些因为之前被问到而投了反对票的好人:我的问题不是关于隐式事件参数。我不知道。事件参数是答案,而不是问题


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没有提示eventwindow的成员。无论如何,它也不起作用)

编辑
所有答案都暗示隐含传递的event。因此,我添加了作为函数的参数(无参数调用),

function myEventHandler(event) {
  var eventSrcType=(event.srcElement) ? event.srcElement.type : 'type undefined';
  alert(eventSrcType);
}

但我仍然没有得到警报。

this作为参数传递会显示"type undefined",但此处需要锚类型。

函数中缺少event参数,因此可能会出现null引用异常。

function myEventHandler(event) {
  var eventSrcType=(event.srcElement) ? event.srcElement.type : 'type undefined';
  alert(eventSrcType);
}

event变量没有在任何地方定义。它通常作为第一个参数传递给事件回调,但它不包含在函数签名中。试试这个功能签名:

function myEventHandler(event) {

以上所有答案都是正确的。您没有理解的是,您必须将该事件对象传递给使用它的函数function onclick(event) { showFS();},但它应该是function onclick(event) { showFS(event);}

onclick 中有一个隐式事件参数

function myfunction(event)
{
    console.log("srcElement " + event.srcElement);
}

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

IE9之前的IE没有通过,所以您需要检查window.event.

此外,您的问题是,不指定event参数是附加事件侦听器的方式。

您通过将元素的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);
}

HTML代码必须看起来像这个

<img onclick="myEventHandler(this)" />

JS:

function myEventHandler(event) {
    var eventSrcType=(event.srcElement) ? event.srcElement.type : 'type undefined';
    alert(eventSrcType);
}

您应该看到"type undefined"显示。

根据是否省略this和/或event,会得到不同的结果。尝试每种组合,直到你得到你想要的结果。