代码之家  ›  专栏  ›  技术社区  ›  Alex Angas Colin

如何替换内联JavaScript事件处理程序?

  •  1
  • Alex Angas Colin  · 技术社区  · 14 年前

    自定义控件已将以下HTML添加到页面:

    <ie:menuitem
      menugroupid="200"
      description="Create a site for a team or project."
      text="New Site"
      onmenuclick="if (LaunchCreateHandler('Site')) { STSNavigate('\u002fsites\u002fsd\u002f_layouts/newsbweb.aspx') }"
      iconsrc="/_layouts/images/newweb32.png" type="option" id="zz4_MenuItem_CreateSite"></ie:menuitem>
    

    我在试着替换 onmenuclick 处理程序:

    var createSiteMenuItem = document.getElementById('zz4_MenuItem_CreateSite');
    if (createSiteMenuItem)
        createSiteMenuItem.onmenuclick = function () { alert('Hello!'); }
    

    原来的操控者还在开火!我正在确保脚本在文档加载后运行。

    这是正确的方法吗?

    3 回复  |  直到 14 年前
        1
  •  1
  •   staticsan    14 年前

    问题是直接分配给 onmenuclick 是不可靠和不标准的。你需要使用 attachEvent() (IE)或 addEventListener()

    编辑

    正如下面所解释的,实际的问题是在Javascript中,元素属性是区分大小写的,尽管HTML是不区分大小写的 "onMenuClick" .

        2
  •  0
  •   Larry K    14 年前

    可以动态生成id。所以,一次是“zz4菜单创建网站”,下一次是其他网站。检查方法:观察多个下载的html源代码,看看id是否不同。

    这个 msdn article

    建议:

        3
  •  0
  •   Community CDub    7 年前

    我已经标记了 staticsan 的回答是正确的- onmenuclick 是不标准的,这就是问题发生的原因。然而,最初提出的决议并不完全正确。这已经被纠正了,但这里是完整的背景故事。。。


    鼠标单击 膨胀 而不是一个事件。这意味着 attachEvent addEventListener

    VS debugger of this code

    决议要简单得多。我将大小写改为Visual Studio调试器中显示的大小写 onMenuClick 而不是 鼠标单击 . “假事件”现在正确触发。