我想更改命名函数内部的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);
};
}
提前感谢您的帮助。
答案 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));
});
});