JQuery callback - строгое нарушение

Я получаю основную идею о this, не находящемся в 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) to reset обработчик one для разных классов в разных точках.

Итак, как мне обойтись с помощью отдельной функции обратного вызова, не нарушая бизнес this?

+6
источник поделиться
4 ответа

Я получаю основное представление об этом не в методе, когда в строгом режиме...

Да, но вы смешиваете две несвязанные вещи: строгий режим и JSLint. Они в значительной степени не связаны (за исключением того, что JSLint имеет возможность требовать строгий режим).

Нет проблем с вашим кодом в строгом режиме. Это совершенно корректно и целесообразно (из-за того, как jQuery использует this). Пример Существует нет "строгое нарушение".

JSLint не нравится, но JSLint не любит много вещей, которые являются абсолютно правильными и подходящими. JSLint обнаруживает комбинацию вещей, которые очень широко признаны как проблемы (например, отсутствующие точки с запятой), и вещи, которые Дуглас Крокфорд не любит с точки зрения стиля. Крокфорд умный и хорошо информированный, но не все согласны с его выбором стиля.

Инструменты Lint очень полезны, что является важной частью инструментария. JSLint менее полезен, чем может быть (на мой взгляд), путем сочетания проблем с элементами стиля (хотя он предоставил тонкую линию с JavaScript). Вы можете рассмотреть возможность использования JSHint, которая дает вам больше контроля над тем, что он проверяет.

+6
источник

Не можете ли вы использовать объект события?

то есть.

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

Пример: http://jsfiddle.net/gRoberts/cRnb3/

+1
источник

вы могли бы прочитать текущийTarget объекта-объекта, прошедшего прохождение, например:

function myFunction (event) {
    var $this = $(event.currentTarget);
    etc etc
};
$('.myClass1').one('keyup', myFunction);
$('.myClass2').one('keyup', myFunction); etc
0
источник

Попробуйте это

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

obj.one('keyup', myFunction);
obj.one('keyup', myFunction); etc
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос