[英]Jquery 'on' event with .bind(this). How to access $(this)?
[英]How to access to $(this) when bind(this) is used?
假设我有一个表单附加到以下javascript函数:
$('#foo').submit(function (event)
{
event.preventDefault();
if (!this.validate()) {
return;
}
console.log($(this).attr('action'));
}.bind(this));
现在的主要问题是, submit
附着功能#foo
可包含多种功能,例如类中: validate
:
Helper.prototype.validate = function()
{
// some content
}
我需要使用this
来访问这些函数,因此我在submit
代码的末尾附加了bind(this)
并且仅使用this.validate
就能调用Helper
类的validate
函数。
上面的场景会导致$(this)
参数出现问题,如果我尝试访问表单的action
,实际上会出现一个问题,那么我将得到一个空字符串,因为javascript会在Helper
类中搜索变量action
。
如果删除bind(this)
,则可以访问表单的操作,但是将失去对validate
函数的访问权限。
有人有解决此问题的想法吗?
js文件的通用结构是这样的:
function()
{
Helper.prototype.bindEventHandlers = function()
{
$('#foo').submit(function (event)
{
event.preventDefault();
if (!this.validate()) {
return;
}
console.log($(this).attr('action'));
}.bind(this));
Helper.prototype.validate = function()
{
...
});
}
}
你不能
bind
的全部要点是替换this
的值。
如果要访问this
值和另一个值,请不要使用bind。 将值存储在其他变量中。 考虑使用IIFE:
$('#foo').submit(
function (context) {
return function(event) {
event.preventDefault();
if (!context.validate()) {
return;
}
console.log($(this).attr('action'));
}
}(this)
);
您可能希望将其拆分以减少使用麻烦:
function thingy_factory(context) {
function thingy(event) {
event.preventDefault();
if (!context.validate()) {
return;
}
console.log($(this).attr('action'));
}
return thingy;
}
和
$('#foo').submit(thingy_factory(this));
我想说的不是依靠关键字this
,刚刚成立的当前值的引用this
外jQuery的回调。
function(){
Helper.prototype.bindEventHandlers = function(){
var context = this;
$('#foo').submit(function (event){
event.preventDefault();
if(!context.validate()){
return;
}
console.log($(this).attr('action'));
});
}
Helper.prototype.validate = function(){
...
});
}
我将Helper.prototype.validate从bindEventHandlers
移出了,我假设这就是您的意图。 可能只是格式错误。
在$('#foo').submit
您可以添加var that = this;
和validate函数将以这种方式调用: that.validate()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.