【发布时间】:2014-06-25 15:37:34
【问题描述】:
我从 HTML 中的按钮调用函数时遇到问题,它给了我:“未捕获的类型错误:未定义不是函数”错误。我不认为这里有什么问题。或者有一些我没有考虑到的东西。提前感谢您的回答!
我有很多 JS 文件,这是因为这是一个学校作业,我们现在正在学习模型、视图、控制器 (MVC) 方法。
我有这个按钮:
<button onClick="ControllerBKE.reageerOpKlik()">Ok!</button>
然后我有这个 Javascript 代码创建一个对象 ^“ControllerBKE”:
"use strict"
window.onload = reageerOpStart();
function reageerOpStart()
{
var controllerBKE = new ControllerBKE();
}
这是“ControllerBKE”中应该但没有对按钮做出反应的代码行:
function ControllerBKE(){
this.reageerOpKlik = reageerOpKlik;
function reageerOpKlik(){
alert('hoi');
}
}
这只是大代码的一小部分。但是当我点击按钮而不是收到带有“hoi”的警报时,我收到了错误消息。
【问题讨论】:
-
作为一个旁注,只是为了良好的实践,尽量避免像
OnClick=""属性那样的内联javascript,而是使用element.addEventListener("click", function(){}) -
@Lior 这听起来像是一个更简单的解决方案,如果我有多个按钮,我如何将该行指定给一个按钮?
-
@user3775849 如果您有多个按钮,请在容器(如文档)上设置 onclick,然后使用 event.target 找出被点击的内容并采取相应措施:
document.onclick=funciton(e){ControllerBKE.reageerOpKlik(e);}并在 reageerOpKlik 中使用e.target因为除非您使用 IE,否则这是被点击的东西,因为他们使用 window.event 而不是将事件作为参数传递。有关构造函数、原型和this的值的更多信息可以在这里找到:stackoverflow.com/a/16063711/1641941 -
@user3775849 你可以像 HMR 写的那样监听容器上的事件,这在内存方面更好,或者如果你正在动态添加元素。如果这些不是问题(因为这是一项学校作业),您可以采取更简单的方法,并为带有 ID 或类的按钮使用独特的选择器。假设您向该按钮添加了一个 ID
id="okBtn"然后您可以查询该元素var okBtn = document.querySelector("#okBtn");然后在事件侦听器中使用它:okBtn.addEventListener("click", YOUR_CALLBACK_FUNCTION)其中 YOUR_CALLBACK_FUNCTION 是您的回调函数:)
标签: javascript html function button