我想知道如何从另一个对象文字中的对象调用方法。这是我的代码。我正在构建一个jQuery UI滑块。我正在尝试在动画对象文字中调用 animatebox 函数,并且我的chrome控制台中的错误是:
Uncaught TypeError: Cannot call method 'animateBox' of undefined
我的代码如下所示:
var sliderOpts = {
animate: true,
range: "min",
value: 50,
min: 10,
max: 100,
step: 10,
//this gets a live reading of the value and prints it on the page
slide: function (event, ui) {
$("#slider-result").html(ui.value + " GB");
},
//this updates the hidden form field so we can submit the data using a form
change: function (event, ui) {
$('#hidden').attr('value', ui.value);
var val = ui.value,
$box = $('#message');
switch (true) {
case (val > 50):
$box.animations.animateBox().html('you have chosen xtremenet');
break;
case (val < 50):
$box.fadeOut().fadeIn().html('you have chosen valuenet');
break;
default:
$box.fadeOut().fadeIn().html('you have chosen powernet');
}
}
};
var animations = {
animateBox: function () {
$("#message").slideDown(500);
}
};
$(".slider").bind("slidecreate", animations.animateBox).slider(sliderOpts);
那么如何调用这个名为animateBox的方法?
答案 0 :(得分:2)
$box.animations
- 未定义 - 它就是
包含jQuery对象的id =“message”的元素,没有动画属性
在您的情况下,您可以通过简单地调用
来解决它animations.animateBox();
而不是$box.animations.animateBox()
答案 1 :(得分:1)
jquery对象$ box没有.animations属性。您已将动画定义为全局(窗口级别)变量。
链接也不起作用,因为你没有从animateBox函数返回任何内容。我想你想改变那个函数来返回$('#message')。一旦你有了,而不是
$box.animations.animateBox().html('you have chosen xtremenet');
试
animations.animateBox().html('you have chosen xtremenet');
答案 2 :(得分:1)
您应该可以致电animations.animateBox()
。您还没有将其设置为jQuery方法,因此$box.animations
可能会导致错误。
答案 3 :(得分:1)
var animations = {
animateBox: function (obj) {
obj.slideDown(500);
}
};
animations.animateBox($box.html('you have chosen xtremenet'))
答案 4 :(得分:0)
您可以通过选项提供animateBox函数作为回调。像这样:
var sliderOpts = {
animateBox: function() { // magic here },
animate: true,
range: "min",
...
};
然后在插件中设置滑块的animateBox值。如果您使用标准插件约定,则对更改中的动画框的调用将如下所示:
this.animateBox();