当我们在按钮中执行内联命令时:
document.getElementById("myButton").onclick = alert('Hi!')
为什么
function()
不起作用,但在页面加载时发出警报?我无法理解添加function()
并且没有 List<int> list1 = new List<int>();
List<int> list2 = new List<int>();
List<int> listDifference = new List<int>();
foreach (var item1 in list1)
{
foreach (var item2 in list2)
{
if (item1 != item2)
listDifference.Add(item1);
}
}
的情况如何。我希望你们理解我的问题。我在这里错过了一些东西。
答案 0 :(得分:31)
ul.product-categories {
list-style: none;
}
错误,因为onclick应该分配给函数引用,而不是函数调用结果本身。
当页面加载时它将执行document.getElementById("myButton").onclick = alert('Hi!')
但这不是意图,是吗?分配onclick处理程序的目的是确保在单击按钮时将执行此警报。
要实现这一目标,应该是:
alert('Hi!')
此外,除非将其包含在document.getElementById("myButton").onclick = function(){alert('Hi!')};
事件中,否则无法执行此操作:
window.onload
答案 1 :(得分:10)
alert('Hi!')
是一个功能来电,可以提醒您<嗨>&#39;什么都不返回(undefined
)。
onclick
期望获得一个函数,并且您正在传递函数调用的结果undefined
。
由于JavaScript
不是强类型框架,因此您不会在错误的作业上收到错误。
那么为什么以下工作:
<button id = "myButton" onclick="alert('Hi!')">
这是因为html解析器(在这种情况下,你的浏览器)在幕后做了一些工作并用函数包装了调用。
答案 2 :(得分:7)
document.getElementById("myButton").onclick
期望稍后调用函数。
<button id = "myButton "onclick="alert('Hi!')">
期望稍后执行一段代码。
答案 3 :(得分:6)
{% extends 'base.html' %}
{% block content %}
<form method="POST" action="url with category here">{% csrf_token %}
<label>enter your phone:</label>
<input type="text" id="mobile_number" />
{% for product_key, product in product_list %}
{% for item_key, item in product %}
<input type="checkbox" name="{{ product_key }}-{{ item_key }}" value="{{ product_key }}-{{ item_key }}" />{{ item_value }}<br />
{% endfor %}
{% endfor %}
<button type="submit" >Submit</button>
</form>
{% endblock %}
此处警告是浏览器调用的内置函数,可打开警告框。
alert('Hi')
此处 callAlert 是一个自定义函数,可调用内置函数警告
在您的示例中,当附加点击事件时,您必须定义该功能
function callAlert(){
alert('Hi');
}
已经执行
document.getElementById("myButton").onclick = alert('Hi!') //alert is
答案 4 :(得分:5)
请参阅this post for explanation for why the inline version works。
简而言之,浏览器不只是将alert('Hi!')
分配给onclick
,而是将其包含在函数中。