我正在尝试将JavaScript函数用作jQuery的事件处理程序,但它需要一个额外的信息。我尝试将其添加到包含数据的对象,并使用this
,但this
在执行时为空。我相信这与JavaScript中的函数复制有关。我怎样才能传递我的额外信息。
<script type="text/javascript">
var WIDTH_ATTR = 'initWidth';
function resizeHandler(event, ui){
var change = ui.size.width - this.master.attr(WIDTH_ATTR);
this.slave.width(slave.attr(WIDTH_ATTR) - change);
};
function splitResize(master, slave, masterHandles){
var s = new SharedResize(master, slave);
master.resizable({ handles: masterHandles, resize: s.resizeHandler });
}
function SharedResize(master, slave){
this.master = master;
this.slave = slave;
this.resizeHandler = resizeHandler;
master.attr(WIDTH_ATTR, master.width());
slave.attr(WIDTH_ATTR, slave.width());
}
// initialise plugins
$(function(){
try {
$('ul.sf-menu').superfish();
splitResize($('#Content'), $('#InfoPanel'));
}catch(ex){
alert(ex.message);
}
});
</script>
此代码出错
Line:13 'this.master' is null or not an object.
尝试调整大小时。
我可以使这个方案工作,还是有另一种方法将事件处理程序与我的数据相关联。
答案 0 :(得分:1)
尝试此更改:
function splitResize(master, slave, masterHandles){
var s = new SharedResize(master, slave);
master.resizable({ handles: masterHandles,
resize: function(event, ui) { s.resizeHandler(event, ui); } });
}
这样,“resize”处理程序将是一个匿名函数,反过来,它会使用适当的上下文(“SharedResize”实例)调用您的处理程序。
答案 1 :(得分:1)
你可以做Pointy的建议,也可以这样做:
function SharedResize(master, slave){
this.master = master;
this.slave = slave;
this.resizeHandler = function(event, ui){
var change = ui.size.width - this.master.attr(WIDTH_ATTR);
this.slave.width(slave.attr(WIDTH_ATTR) - change);
};
master.attr(WIDTH_ATTR, master.width());
slave.attr(WIDTH_ATTR, slave.width());
}