Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript";这";在jquery事件中_Javascript_Jquery_Function_This - Fatal编程技术网

Javascript";这";在jquery事件中

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

如何在Jquery change函数中正确调用functionOne?“this”不再引用对象

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知道他们需要打电话。是的,谢谢你的支持