onerorr回调方法不会触发。是一个需要的事件监听器?

时间:2011-09-28 13:55:39

标签: javascript

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

问题我看到的是我的图像onerror事件仅适用于重新加载的版本。在这里,我使用传统的内联事件注册到i_bm_err,它可以工作。

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

我的问题:我是否需要添加事件监听器?如果是这样,事件监听器的类型是什么?我尝试添加“错误”和“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()中的时候   从click事件调用是对表't'的引用。这是   与在处理程序中添加处理程序时发生的行为形成对比   HTML源代码:

1 个答案:

答案 0 :(得分:1)

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