jQuery回调 - 严格违规

时间:2012-07-26 08:07:16

标签: javascript jquery callback this strict

我在this概述here时得到method不在strict 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 个答案:

答案 0 :(得分:6)

  

我得到的基本想法是,在严格模式下不在方法中......

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

严格模式下的代码没有问题。它完全有效且适当(因为jQuery使用this)。 Example那里有没有“严格违规”。

JSLint不喜欢它,但JSLint并不喜欢很多完全有效且合适的东西。 JSLint检测到一些被广泛认可的问题组合(例如缺少分号),以及Douglas Crockford从 style 角度看不喜欢的东西。 Crockford聪明而且消息灵通,但不是每个人都同意他的风格选择。

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

答案 1 :(得分:1)

您不能使用事件对象吗?

即。

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

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

答案 2 :(得分:0)

你可以读取传递的event-object的currentTarget,如:

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

答案 3 :(得分:0)

试试这个

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

obj.one('keyup', myFunction);
obj.one('keyup', myFunction); etc