2

我有如下内容:

MyShape=函数(){var容器={宽度:100,高度:100}this.draw(){//做一些事情。。。}$('#slider-1').bind('change',function(event,ui){_container.width=$('#slider-1').val();this.draw();});};

我使用jquery滑块动态更改形状的宽度,然后调用.draw()重新绘制形状。尽管如此,我还是不断收到此错误:

未捕获类型错误:对象#没有方法“draw”

我很确定这是因为我需要将上下文“this”传递到change函数中,但我似乎不知道如何做到这一点。

0

1答案1

重置为默认值
8

这是因为JavaScript的是动态的.

你可以使用功能.原型.bind就像这样:

$('#slider-1').on('change',function(event,ui){_container.width=$('slider-1').val();this.draw();}.bind(this)/*使用相同的此值*/);

或者可以使用闭包变量

var that=这个;$('#slider-1').on('change',function(event,ui){_container.width=$('slider-1').val();that.draw();});
5
  • 1
    阿尔索$.代理不过,绑定我认为在这个例子中更干净。
    – 压碎
    评论 2014年1月13日17:51
  • 2
    @本杰明-很好的及时编辑;我想指出你需要使用上的:) 评论 2014年1月13日17:51
  • @Tyblitz公司:.on()可能是首选,但不需要。 评论 2014年1月13日17:56
  • @user602525:请注意函数.prototype.bind()第一个示例中使用的浏览器在IE8及更低版本以及其他一些较旧的浏览器中不可用。 评论 2014年1月13日17:57
  • .绑定只是别名。这是它的完整源代码函数(类型,数据,fn){return this.on(类型,null,数据,fn);}.最好使用上的因为它是更新的界面。 评论 2014年1月13日17:57

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.