错误回调方法未触发.是否需要事件侦听器

onerorr callback method does not fire. is an event listener needed?

本文关键字:事件 侦听器 是否 回调 方法 错误      更新时间:2023-09-26

我使用以下代码根据用户输入动态创建DOM元素(例1)。我还使用php/xhtml在重新加载时创建相同的元素(例2)。

我看到的问题是,我的imagonerror事件只适用于重新加载的版本。这里我使用传统的内联事件注册到i_bm_err,它工作。

但是对于javascript版本,onerorr回调方法不会触发。

我的问题:我需要添加一个事件监听器吗?如果是,事件侦听器的类型是什么?我尝试添加类型为"error"answers"onerror"的事件监听器,但这不起作用。这让我认为也许添加和事件侦听器不是问题。

示例1

function o3(a)  
  {
  return document.createElement(a);
  }
  var b=o3('a');
    b.innerHTML=c[1].value;
    b.href=c[2].value;
    b.name="a1";
    b.className="b";
    b.target="_blank";
  var e=o3('img');
    e.className="c";
    e.name="bo_im";
    e.src=b.href+'favicon.ico';
    e.onerror=function(e){e.src='http://www.archemarks.com/favicon1.ico';};
示例2

PHP/XHTML
  function bookmarks()
    {
    $email = $_SESSION['email'];
    $query_return = database::query("SELECT * FROM bo  WHERE email='$email' ORDER BY name ASC");
    while ($ass_array = mysqli_fetch_assoc($query_return))
      {
      $fav=$this->fav($ass_array['url']);
      echo "<img name='"bo_im'" class='"c'" src='"$fav'"/ onerror='"i_bm_err(this)'"><a target='"_blank'" name = '"a1'" class = '"b'" href = '"$ass_array[url]'">$ass_array[name]</a>";
      }
    }
Javascript

function i_bm_err(a)
  {
  a.src='http://www.archemarks.com/favicon1.ico';
  }
研究:

MDN - element.addEventListener

在上面的例子中,在modifyText()中this的值从click事件调用的是对表't'的引用。这是控件中添加处理程序所发生的行为与此相反HTML源代码:

正如@Paul Grime所提到的,在设置src属性之前,您需要附加所有事件(错误,加载等)。