【问题标题】:onclick event - why Javascript runs it onloadonclick 事件 - 为什么 Javascript 在加载时运行它
【发布时间】:2012-04-27 18:10:59
【问题描述】:
<p id="specialp">some content</p>
<script>
document.getElementById('specialp').onclick=alert('clicked');
</script>

我刚开始使用 Javascript,我不明白为什么在页面加载时会执行警报,但在我单击该段落时不会。

当我将它内联时,处理程序按我预期的方式工作,如下所示:

<p id="specialp" onclick="alert('clicked')" >some content</p>

【问题讨论】:

    标签: javascript function onclick dom-events


    【解决方案1】:

    这是因为您没有将onclick 赋值包装为实际函数,因此它尝试将alert('clicked') 的结果分配给onclick 事件处理程序(这意味着分配时它可能是undefined)。您需要做的是为该处理程序分配一个函数,如下所示:

    document.getElementById('specialp').onclick = function()
    {
        alert('clicked');
    };
    

    当您在 HTML 中做同样的事情时,DOM 会自动为您将该内容包装在一个函数中。

    【讨论】:

    • alert() 本身不是一个函数吗?这是否意味着如果 alert() 以某种方式返回 true 这种方法会起作用?另外,为什么页面加载后才执行?
    • alert 是一个函数,但您没有将其分配给该函数,而是将表达式 alert('clicked') 分配给 onclick 对象。表达式作为赋值的一部分进行计算。你所做的在技术上与var x = 4 + 2 没有什么不同。该脚本在加载时运行,并将分配 6 给 x,而不是在稍后使用 x 时。
    • 如果我想在函数中使用元素的某些属性,我将如何将参数中的对象传递给该函数,它会是什么样子?我将它用于页面上的所有元素,所以我不能使用 getElementById() 函数。
    • this 将是函数调用元素的上下文。即:function() { alert(this.id); }
    • var x=document.getElementsByTagName("a"); for(i=0;x[i]!=null;i++) {x[i].onclick=function() {alert(this.href);this.preventDefault();this.stopPropagation();};}你能告诉我这不起作用的原因吗?
    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-26
    • 1970-01-01
    相关资源
    最近更新 更多