JQuery передать объект из одной функции в другую - PullRequest
0 голосов
/ 04 марта 2012

Я сделал небольшую функцию, которую я буду использовать несколько раз в приложении. Похоже, что я написал неверный синтаксис, потому что моя консоль показывает ошибку "Object [object Object] не имеет метода 'fadeIt'

Итак, я думаю, что проблема заключается в передаче объекта одной функции в другую ... не знаю, как это сделать изящно. Мой код ниже.

Спасибо за вашу помощь!

http://jsfiddle.net/danielredwood/aFx6u/2/

function fadeIt() {
    $(this).animate({
        opacity:0
    }, 400, function(){
        //$(this).css('cursor','auto');
        //$(this).children('img').css('margin-left','-100px');
    });
}

$('.box').click(function(){
    $(this).fadeIt();
}):

Ответы [ 4 ]

2 голосов
/ 04 марта 2012

Вы, вероятно, хотите превратить это в плагин и использовать следующий подход:

$. Fn.fadeIt = function () {

};

тогда вы можете использовать $ (this) .fadeIt ();

1 голос
/ 04 марта 2012

Вы можете установить контекст вызова функции fadeIt, используя .call(), например так ...

fadeIt.call(this)

Объяснение:

В JavaScript есть два метода, .call() и .apply(), которые позволяют вручную установить значение this в вызываемой функции во время вызова.

Для этой цели во всех функциях JavaScript доступны методы .call() и .apply().

Первый аргумент метода - это значение, которое вы хотите установить для this в функции, которую вы используете.ссылающееся.Единственная разница между ними заключается в том, как передаются аргументы.


При .call() аргументы передаются индивидуально, например ...

func.call(thisArg, 'foo', 'bar')

При .apply() аргументы передаются как массив, подобный массиву ...

func.apply(thisArg, ['foo', 'bar'])

... который будет деструктурирован как отдельные аргументы в вызываемой функции.

0 голосов
/ 04 марта 2012

То, что вы пытаетесь сделать, это вызвать функцию с использованием точечной нотации, которая в Javascript ограничена только прототипом объекта.То, что вы хотите сделать, это изменить его, чтобы вы передавали this в качестве аргумента в fadeIt

function fadeIt(obj) {
...
}

, затем вызываете fadeIt($(this));

0 голосов
/ 04 марта 2012

Это исправляет ваш код.

function fadeIt(element) {
    element.animate({
        opacity:0
    }, 400, function() {
        // element.css('cursor','auto');
        // element.children('img').css('margin-left','-100px');
    });
}

$('.box').click(function() {
    fadeIt($(this));
}):

Однако я настоятельно рекомендую использовать встроенные функции jQuery, такие как fadeOut и fadeIn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...