6

我得到了关于不在此处概述的基本想法,this老实说,它有点博学。所以,用更平淡的术语来说:methodstrict mode

我有一个像这样的处理程序:

$('.myClass').one('keyup', function() {
    var $this = $(this);
    etc etc
});

我想把它改成这样:

function myFunction () {
    var $this = $(this);
    etc etc
};
$('.myClass1').one('keyup', myFunction);
$('.myClass2').one('keyup', myFunction); etc

它不喜欢它,strict mode因为我在方法this之外使用它。我明白了。

但是,我需要myFunction与处理程序分开,因为(1)它附加到各种类/元素和(2)我用来在各个点.off().one('keyup', myFunction)重置one各种类的处理程序。

那么如何在不违反this业务的情况下绕过单独的回调函数呢?

4

4 回答 4

6

在严格模式下,我得到了关于这不是一种方法的基本想法......

是的,但是您混淆了两个不相关的东西:严格模式和 JSLint。它们在很大程度上是不相关的(除了 JSLint 可以选择要求严格模式)。

您的代码在严格模式下没有问题。它是完全有效和适当的(因为 jQuery 的使用方式this)。示例那里没有“严格违规”。

JSLint 不喜欢它,但是 JSLint 不喜欢很多完全有效和适当的东西。JSLint 检测到一些被广泛认为是问题的事物(如缺少分号)和 Douglas Crockford 从风格角度不喜欢的事物的组合。克罗克福德聪明又见多识广,但并不是每个人都同意他的风格选择。

Lint 工具非常有用,是工具包的重要组成部分。JSLint 通过将实质问题与样式问题混为一谈(尽管理所当然地认为这是一条很好的路线,在我看来),但 JSLint 的帮助并不大(在我看来)。您可以考虑使用JSHint,这是一个可以让您更好地控制检查内容的分支。

于 2012-07-26T08:13:00.650 回答
1

你不能改用事件对象吗?

IE

function myFunction (e) {
    var $this = $(e.currentTarget);
};

示例:http: //jsfiddle.net/gRoberts/cRnb3/

于 2012-07-26T08:13:10.103 回答
0

您可以读取通过的事件对象的 currentTarget ,例如:

function myFunction (event) {
    var $this = $(event.currentTarget);
    etc etc
};
$('.myClass1').one('keyup', myFunction);
$('.myClass2').one('keyup', myFunction); etc
于 2012-07-26T08:15:15.157 回答
0

尝试这个

function myFunction () {
    var $this = $(this);
    etc etc
};
var obj=  $('.myClass1');
obj.myFunction =myFunction ;

obj.one('keyup', myFunction);
obj.one('keyup', myFunction); etc
于 2012-07-26T08:24:10.300 回答