我设计了一个类似于我在制作jQuery应用程序时遇到的问题的小提琴。我有多个执行动作的按钮,必须在动画结束后更改标题。标题取决于按下的按钮。由于您无法将参数传递给回调,因此我尝试传递全局变量。有没有更合适的方法呢?
var heading = '';
function headingChanger(e) {
$("#heading").html(heading);
}
$("#one").click(function (e) {
heading = 'HEADING 1'
$("#slider").animate({
'margin-left' : '200px'
},1000,'linear',headingChanger);
});
$("#two").click(function (e) {
heading = 'HEADING 2'
$("#slider").animate({
'margin-left' : '0'
},1000,'linear',headingChanger);
});
答案 0 :(得分:3)
您可以将该功能称为:
$("#two").click(function (e) {
heading = 'HEADING 2'
$("#slider").animate({
'margin-left' : '0'
},1000,'linear',function() { headingChanger(heading) });
});
这将使headingChanger在回调时得到评估。
答案 1 :(得分:0)
JS是函数作用域(嗯,IE8也支持),因此,您可以将所有内容包装成一个很好的函数,并导出全局所需的东西:
(function headingMoverModule(exports){
var heading = '';
function headingChanger(e) {
$("#heading").html(heading);
}
$("#one").click(function (e) {
heading = 'HEADING 1'
$("#slider").animate({
'margin-left' : '200px'
},1000,'linear',headingChanger);
});
$("#two").click(function (e) {
heading = 'HEADING 2'
$("#slider").animate({
'margin-left' : '0'
},1000,'linear',headingChanger);
});
exports.headingChanger = headingChanger;
})(window);
一些类似OOP的处理有助于,尽管将其应用于模块,或将函数绑定到其原始参数,例如, jQuery.proxy
答案 2 :(得分:0)
您可以将它们组合起来并执行以下操作:
function headingChanger(heading) {
$("#heading").html(heading);
}
$("#one, #two").click(function (e) {
var h = e.target.id==='one'?'1':'2';
$("#slider").animate({
'margin-left' : h=='1'?'200px':'0'
},1000,'linear',function() {
headingChanger('HEADING '+h);
});
});