将其他参数传递给javascript事件

时间:2011-03-07 17:35:15

标签: javascript jquery function-pointers

我正在尝试将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.

尝试调整大小时。

我可以使这个方案工作,还是有另一种方法将事件处理程序与我的数据相关联。

2 个答案:

答案 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());
}