繁体   English   中英

将其他参数传递给javascript事件

[英]Pass additional arguments into javascript event

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

尝试调整大小时。

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

试试这个改变:

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”实例)调用您的处理程序。

你可以做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());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM