Javascript";这";在jquery事件中
如何在Jquery change函数中正确调用functionOne?“this”不再引用对象Javascript";这";在jquery事件中,javascript,jquery,function,this,Javascript,Jquery,Function,This,如何在Jquery change函数中正确调用functionOne?“this”不再引用对象 NameSpace.object = { functionOne: function(){ // stuff }, functionTwo: function(){ this.functionOne(); // this works correctly }, functionThree: function(){ $('input').change(fu
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
$('input').change(function(){
if ( $(this).val() > 1) {
this.functionOne(); // this is no longer calling function one
}
}
}
}
一种方法是使用,通常称为
self
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
var self = this;
$('input').change(function(){
if ( $(this).val() > 1) {
self.functionOne(); // this is no longer calling function one
}
}
}
}
在正常情况下,您可以使用
this
将回调绑定到对象。但在本例中,我不知道它如何与jquery重写this
以引用触发回调的元素交互 一种方法是使用,通常称为self
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
var self = this;
$('input').change(function(){
if ( $(this).val() > 1) {
self.functionOne(); // this is no longer calling function one
}
}
}
}
在正常情况下,您可以使用
this
将回调绑定到对象。但在本例中,我不知道它如何与jquery重写this
以引用触发回调的元素交互 由于您有两个不同的值要使用,而jQuery已经将其中一个值放在了中,因此您可以将另一个值保存在更高范围的变量中:
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
// save value if this so it can be used later in this scope
var self = this;
$('input').change(function(){
if ( $(this).val() > 1) {
self.functionOne();
}
}
}
}
或者,由于这是一个静态命名的名称空间.object
,您也可以直接引用该名称:
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
$('input').change(function(){
if ( $(this).val() > 1) {
NameSpace.object.functionOne();
}
}
}
}
或者,由于jQuery提供了将数据传递给事件处理程序的机制,因此您也可以使用该机制:
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
$('input').change(this, function(e){
if ( $(this).val() > 1) {
e.data.functionOne();
}
}
}
}
在这里,jQuery机制不是我最喜欢的,因为我认为调用e.data.functionOne()
的代码不太明显(读者必须回顾代码,找出e.data
是什么),但这只是我个人对这种情况的看法。因为您有两个不同的值要使用,而jQuery已经将其中一个值放入了中,您可以将另一个值保存在更高范围的变量中:
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
// save value if this so it can be used later in this scope
var self = this;
$('input').change(function(){
if ( $(this).val() > 1) {
self.functionOne();
}
}
}
}
或者,由于这是一个静态命名的名称空间.object
,您也可以直接引用该名称:
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
$('input').change(function(){
if ( $(this).val() > 1) {
NameSpace.object.functionOne();
}
}
}
}
或者,由于jQuery提供了将数据传递给事件处理程序的机制,因此您也可以使用该机制:
NameSpace.object = {
functionOne: function(){
// stuff
},
functionTwo: function(){
this.functionOne(); // this works correctly
},
functionThree: function(){
$('input').change(this, function(e){
if ( $(this).val() > 1) {
e.data.functionOne();
}
}
}
}
在这里,jQuery机制不是我最喜欢的,因为我认为调用e.data.functionOne()
的代码不太明显(读者必须回顾代码,找出e.data
是什么),但这只是我个人对这种情况的看法。尝试在functionThree
中设置NameSpace
变量,调用NameSpace.object.functionThree()
在input
元素中设置change
事件
var NameSpace={};
NameSpace.object={
函数一:函数(){
//东西
警报(“功能一”)
},
函数二:函数(){
this.functionOne();//这工作正常
},
函数三:函数(){
var ns=这个;
$('input').change(函数(){
如果($(this).val()>1){
ns.functionOne();//这不再调用函数一
}
})
}
}
NameSpace.object.functionThree()
尝试在functionThree
中设置命名空间的变量,调用NameSpace.object.functionThree()
在输入
元素处设置更改
事件
var NameSpace={};
NameSpace.object={
函数一:函数(){
//东西
警报(“功能一”)
},
函数二:函数(){
this.functionOne();//这工作正常
},
函数三:函数(){
var ns=这个;
$('input').change(函数(){
如果($(this).val()>1){
ns.functionOne();//这不再调用函数一
}
})
}
}
NameSpace.object.functionThree()
您还可以使用jQuery.change([eventData],…)的可选参数
通过将此
传递到事件数据
可以通过事件变量从处理程序内部访问它
$('input').change(this,function(e){
...
e.data.functionOne();
...
}
您还可以使用jQuery.change([eventData],…)的可选参数
通过将此
传递到事件数据
可以通过事件变量从处理程序内部访问它
$('input').change(this,function(e){
...
e.data.functionOne();
...
}
打字错误?您有两个functionTwo
并且在第一个functionTwo:
之后没有逗号?this.functionOne()
在functionTwo
范围内不存在此
引用其中的jQuery对象(事件处理程序),用于输入元素typo?您有两个functionTwo
并且在第一个functionTwo:
之后没有逗号?this.functionOne()
在functionTwo
范围内不存在这
指的是输入元素中的jQuery对象(事件处理程序)。谢谢@jfriend00,这两种解决方案都有优点还是缺点?我知道。我在问题发布时看到了他们。有趣的是,前两个答案都忽略了这些错误。@MicFin-如果您通常都是从这个结构之外调用NameSpace.object.functionOne()
,那么我也会坚持这个方案。否则,这真的是你的选择。@guest271314-是的,假设有人调用functionThree()
来开始工作。就问题而言,这显然是一个虚构的例子。我想OP知道他们需要这样称呼。是的,谢谢你理解我的假设和拼写@jfriend00!谢谢@jfriend00,这两种解决方案都有好处还是坏处?我知道。我在问题发布时看到了他们。有趣的是,前两个答案都忽略了这些错误。@MicFin-如果您通常都是从这个结构之外调用NameSpace.object.functionOne()
,那么我也会坚持这个方案。否则,这真的是你的选择。@guest271314-是的,假设有人调用functionThree()
来开始工作。就问题而言,这显然是一个虚构的例子。我想OP知道他们需要打电话。是的,谢谢你的支持