Javascript 原型内部的事件触发
当我试图调用“Test”函数时,我得到一个错误。Javascript 原型内部的事件触发,javascript,Javascript,当我试图调用“Test”函数时,我得到一个错误。 如何解决这个问题?(没有jquery!) 浏览器:firefox 错误: TypeError:此.Test不是函数 无标题文件 MyClass=函数(){ } MyClass.prototype={ Init:function(){ var txt=document.getElementById(“文本”); 如果(txt.addEventListener){ txt.addEventListener(“keyup”,this.Foo,true
如何解决这个问题?(没有jquery!) 浏览器:firefox
错误: TypeError:此.Test不是函数
无标题文件
MyClass=函数(){
}
MyClass.prototype={
Init:function(){
var txt=document.getElementById(“文本”);
如果(txt.addEventListener){
txt.addEventListener(“keyup”,this.Foo,true)
}
},
Foo:function(){
这个。Test();
},
测试:函数(){
警报(“正常”);
}
}
window.onload=函数(){
obj=新的MyClass;
obj.Init();
}
这是因为您将this.Foo
引用为事件,实际发生的情况是它将该函数复制到对象范围之外,因此此
不存在。大多数人所做的是在事件周围使用匿名函数/包装器。这是因为您将this.Foo
引用为事件,实际发生的是它将该函数复制到对象范围之外,因此this
不存在。大多数人所做的是在事件周围使用匿名函数/包装器。错误是什么?什么浏览器?IE不支持addEventListener(),它使用attachEvent()。这就是为什么大多数人使用JQuery或YUI等框架的原因。当你遇到错误时,请在问题中引用它。我认为你可以使用JQuery来解决这个问题。@Matthew Smith,browser:firefox错误:TypeError:This。测试不是function@Matti正如我所指出的,没有JQUERY纯Javascript错误是什么?什么浏览器?IE不支持addEventListener(),它使用attachEvent()。这就是为什么大多数人使用JQuery或YUI等框架的原因。当你遇到错误时,请在问题中引用它。我认为你可以使用JQuery来解决这个问题。@Matthew Smith,browser:firefox错误:TypeError:This。测试不是function@Matti正如我所指出的,没有JQUERY纯JAVASCRIPT这个
存在:在触发事件的那一刻,它被设置为elementtextarea\text
@shivesh,类似这样的吗<代码>var self=此;addEventListener(“keyup”,function(){self.Foo();},true)
@Marcel在这种情况下并不完全正确,大多数JS库都确保this
是元素,但在本机javascript中,这种行为并不是100%跨浏览器的。没错,但OP使用的是Firefox和addEventListener
这个确实存在:在事件触发的那一刻,它被设置为elementtextarea#text
@shivesh类似的东西<代码>var self=此;addEventListener(“keyup”,function(){self.Foo();},true)
@Marcel这在这种情况下并不完全正确,大多数JS库都确保this
是元素,但在本机javascript中,这种行为不是100%跨浏览器的。没错,但OP使用的是Firefox和addEventListener
。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
<script type="text/javascript">
MyClass = function(){
}
MyClass.prototype = {
Init: function(){
var txt = document.getElementById("text");
if (txt.addEventListener) {
txt.addEventListener("keyup", this.Foo, true)
}
},
Foo: function(){
this.Test();
},
Test: function(){
alert('OK');
}
}
window.onload = function(){
obj = new MyClass;
obj.Init();
}
</script>
</head>
<body>
<textarea id="text" rows="10">
</textarea>
</div>
</body>