.css函数在处理函数内部不起作用

时间:2011-09-11 16:49:56

标签: javascript jquery

我想更改命名函数内部的css属性,以便处理click事件。如果我在click事件中定义的匿名函数中调用.css,它就可以工作。但是,我想在处理函数内定义的命名函数内调用.css。这是我的代码。

$(document).ready(function () {
    $('#popup').click(partial(coolTransition, $(this)));
});

function coolTransition(elem) {
    shrink();

    function shrink() {
        elem.css('background-color', '#000000');
    }
}

//used to implement partial function application so that I can pass a handler reference that takes arguments. 
//see http://stackoverflow.com/questions/321113/how-can-i-pre-set-arguments-in-javascript-function-call-partial-function-applic
function partial(func /*, 0..n args */ ) {
    var args = Array.prototype.slice.call(arguments, 1);
    return function () {
        var allArguments = args.concat(Array.prototype.slice.call(arguments));
        return func.apply(this, allArguments);
    };
}

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您认为$(this)在第二行中指的是什么?它不是$('#popup')。如果要引用它,则必须先创建引用:

$(document).ready(function () {
    var $popup = $('#popup');
    $popup.click(partial(coolTransition, $popup));
});

尽管如此,使用partial并不是必需的。你也可以这样做:

$('#popup').click(function() {
    coolTransition($(this));
});

甚至

$('#popup').click(function() {
    $(this).css('background-color', '#000000');
});

还有很多其他方法......

顺便说一下。在shrink内定义coolTransition似乎是不必要的。除非你有理由,否则不要这样做。

答案 1 :(得分:2)

在:

$(document).ready(function() {
    $('#popup').click(partial(coolTransition, $(this)));
});

$(this)$(document)。您需要$(this)来处理$('#popup')的上下文,为此您需要一个函数:

$(document).ready(function() {
    $('#popup').click((function() {
       return partial(coolTransition, $(this));
    })());
});

或者,您可以完全避免$(this)

$(document).ready(function () {
    var $elm = $('#popup');
    $elm.click(partial(coolTransition, $elm));
});

但实际上,partial的整个用法似乎过于复杂。为什么你认为你需要它?最简单的方法是:

$(document).ready(function() {
    $('#popup').click(function() {
       coolTransition($(this));
    });
});