【问题标题】:javascript event.target not working in mozillajavascript event.target 在 Mozilla 中不起作用
【发布时间】:2023-03-26 19:11:02
【问题描述】:
<script type ='javascript'>
    function fun(userID) {
        var btn = event.target; // error 'event' undefine in mozilla 
        alert(btn.id);
    }
</script>

<asp:linkButton id ="target" style =" cursor:pointer" onclick ="fun('1')" >click here </asp:LinkButton>

我是 JavaScript 新手,我已经编写了上面的代码,这段代码在 Google chrome 中运行良好,但在 Mozilla Firefox 中无法运行。谁能建议如何找到控制触发事件?

【问题讨论】:

  • 函数是怎么调用的?

标签: javascript jquery asp.net


【解决方案1】:

将事件传递给函数:

<asp:linkButton id ="target" style =" cursor:pointer" onclick ="fun(event, '1')" >click here </asp:LinkButton>

function fun(event, userID)
{
    event= event|| window.event;
    var btn = event.target; 
    alert(btn.id);
}

确保您的事件不是未定义的

function fun(userID)
{
    var e = event || window.event;
    var btn = e.target; 
    alert(btn.id);
}

【讨论】:

  • 火狐需要事件作为参数,第一个是完美的,通过添加e = event || window.event; var target=e.target || e.srcElement使其跨浏览器。
  • 两者的混合加上 e.srcElement 为 ie 更好或通过 this 代替
  • 第一个有效,第二个在firefox中仍然有问题,事件未定义
【解决方案2】:

event 在 firefox 中未定义,因为 firefox 没有此属性,您可以将事件作为参数提供给事件处理函数。

但是您的代码可以在 Chrome 和 IE 中正常工作

此外,我还将编写像 &lt;script type ='text/javascript'&gt; 这样的类型的脚本,而不仅仅是 &lt;script type ='javascript'&gt;

【讨论】:

    【解决方案3】:

    要在点击处理程序中访问event,请将其附加到 jQuery 而不是 HTML。

    HTML:

    <a id ="target" style ="cursor:pointer" data-value="1">click here</a>
    

    Javascript:

    $(function() {
        $("#target").on('click', function(event) {
            event.preventDefault();
            var btn = this;
            var value = $(this).data('value');
            alert(btn.id + ', ' + value);
        });
    });
    

    许多人(包括我自己)认为这是附加事件处理程序的“正确”方式。有几个优点,访问事件对象只是其中之一。

    【讨论】:

    • 如何将多个参数传递给函数。我必须使用 split() 函数吗???
    • 是的,您可以将数据压缩到一个data-value 中,然后用.split() 将其分开。或者,您可以在 HTML 中设置任意数量的 data-xxxdata-yyy 属性 - 它们中的每一个都可以通过 $(this).data('xxx')$(this).data('yyy') 等在 jQuery 中单独访问。
    【解决方案4】:

    如果你 使用关键字this 传递按钮然后不需要事件

    ...onclick="fun(this,1)"
    
    function fun(but, userID) { 
      var butID=but.id
    
    }
    

    【讨论】:

      【解决方案5】:

      使用 arguments[0].target 而不是 event.target。大多数浏览器都支持 event 全局变量,但 firefox 不支持。 arguments[0] 包含所有相同的属性和函数,但所有浏览器都支持。

      附带说明:参数数组中的索引可以通过您自己的代码进行更改。在我当前的项目中,arguments[0] 出于某种原因包含我所有的控制器功能,而全局事件方法和属性包含在 arguments[1] 中。不完全确定这是为什么,但您可能需要对参数数组进行一些调试,以查看它包含哪些值并进行相应调整。然而,arguments[0] 通常应该起作用。

      【讨论】:

        猜你喜欢
        • 2021-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-06
        • 1970-01-01
        • 2020-12-21
        相关资源
        最近更新 更多