【问题标题】:What is 'click()' in JavaScript什么是 JavaScript 中的“click()”
【发布时间】:2010-02-05 11:13:06
【问题描述】:

我在 FireFox 中使用 JavaScript,遇到了一个问题,如下例所示:

<HEAD>
<script type="text/javascript">
function click()
{
    alert("click");
}

</script>
</HEAD>

<BODY>

<input type="radio" onclick="click()">
</BODY>

当我点击单选按钮时,什么都没有发生,也没有错误(在 Firebug 中)

如果我将函数名称更改为 do_click,并更改 onclick,则会收到警报。

所以问题是:发生了什么? click 似乎不是保留字,也不是现有符号

【问题讨论】:

    标签: javascript


    【解决方案1】:

    内联事件处理程序中的代码的作用域是元素,就好像它在 with 块中一样。

    因此,在onclick 处理程序中,名称click 解析为元素的click 方法。

    通过在处理程序中写入alert(nodeName),这可以是demonstrated

    【讨论】:

    • 天啊*,我从不知道这一点。甚至在 IE 中的行为也相同。现在看来这很危险....
    • 一个 DOM 节点有很多属性。如果单击处理程序只是试图设置一个恰好与节点属性之一命名相同的全局变量(例如innerHTML),那么...... 废话
    • 不将任何真实代码放入内联处理程序的另一个原因。
    【解决方案2】:

    DOM 元素有一个原生的click() 方法。

    以下将表明 click 是一个原生方法:

    <input type="radio" onclick="alert(click.toString())">
    

    您可以将单击函数注册为事件处理程序,如下所示。在处理程序中,this 将引用 HTML 元素。

    <input type="radio" id="foo" >
    
    function click()
    {
        alert("click");
    }
    document.getElementById('foo').onclick = click;
    

    http://www.quirksmode.org/js/introevents.html有一系列关于浏览器事件的优秀文章

    【讨论】:

      【解决方案3】:

      我认为 click() 是一个保留的过程名称,所以你不能覆盖它。解释了为什么更改名称而没有其他方法可以正常工作。

      【讨论】:

      • “无法覆盖”不正确。只是目标不同。
      【解决方案4】:

      我认为 javascript 中的 click() 方法模拟了单击按钮。所以这一定是一种无限循环......

      编辑添加:查看MSDN 以获取点击方法的文档

      【讨论】:

        【解决方案5】:

        'click' 本身并不是 Slaks 回答的内联事件处理程序上下文之外的 javascript reserved keyword

        也就是说问题中定义的“点击”方法是有效的。 “外部”附加事件处理程序将起作用。例如。使用 jQuery:

        $('input').click(click);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-19
          相关资源
          最近更新 更多