所以我们有一个页面:
<span id='container'>
<a href='#' id='first'>First Link</a>
<a href='#' id='second'>Second Link</a>
</span>
Run Code Online (Sandbox Code Playgroud)
并想要添加一些点击事件:
first.addEventListener('click', function(){alert('sup!');})
Run Code Online (Sandbox Code Playgroud)
奇迹般有效!但是,当您将第二个参数设为外部函数时:
function message_me(m_text){
alert(m_text)
}
second.addEventListener('click', message_me('shazam'))
Run Code Online (Sandbox Code Playgroud)
它立即调用该函数.我怎么能阻止这个?很烦人!
这是一个现场演示:http://jsfiddle.net/ey7pB/1/
我无法理解为什么事件侦听器的函数参数不只接受该函数。这是代码:
变量声明:
var spanJS = document.getElementById("spanJS")
var txtPlayers = document.getElementById("ContentPlaceHolder1_txtPlayers")
var txtAmount = document.getElementById("ContentPlaceHolder1_txtAmount")
Run Code Online (Sandbox Code Playgroud)
然后关联事件监听器:
txtAmount.addEventListener("keyup", UpdateTotals())
txtPlayers.addEventListener("keyup", UpdateTotals())
Run Code Online (Sandbox Code Playgroud)
然后函数:
function UpdateTotals() {
...
}
Run Code Online (Sandbox Code Playgroud)
这是整个代码。问题是,当我运行它时,它执行 UpdateTotals() 而没有任何 keyup 事件,并且侦听器不起作用。
如果我进行以下更改,它将按预期工作:
txtAmount.addEventListener("keyup", function () {
UpdateTotals()
})
txtPlayers.addEventListener("keyup", function () {
UpdateTotals()
})
Run Code Online (Sandbox Code Playgroud)
谁能解释一下为什么我不能只输入函数的名称,而必须将其“子化”到另一个函数中?