Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在google maps的addListener事件中传递函数_Javascript_Jquery_Google Maps - Fatal编程技术网

Javascript 在google maps的addListener事件中传递函数

Javascript 在google maps的addListener事件中传递函数,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我正在构建一个javascript对象映射,以便能够通过Google映射处理事件 我希望能够在事件发生时传递要执行的函数: var MapMarker = (function ($) { bindClickEvent = function (marker, action) { google.maps.event.addListener(marker, 'click', action); }; return { bindClickEv

我正在构建一个javascript对象映射,以便能够通过Google映射处理事件

我希望能够在事件发生时传递要执行的函数:

var MapMarker = (function ($) {

    bindClickEvent = function (marker, action) {

        google.maps.event.addListener(marker, 'click', action);
    };

    return {

        bindClickEvent: bindClickEvent,
    };

})(jQuery);
我试着这样称呼它:

 var action = PartnerDetail.load(id);   <=== it gets executed here

 MapMarker.bindClickEvent(marker, action);

var action=PartnerDetail.load(id) 嗯。你已经回答了。将函数操作作为函数对象传递。重要的是要知道:当您执行函数并将其保存在变量(action)中时,action将不再是一个函数,而是一个由执行的fn返回的对象

因此,现在将动作定义为

PartnerDetail.load

只需将函数文本与闭包一起使用

MapMarker.bindClickEvent(marker, (function (i) {
        return function () {
            PartnerDetail.load(i)
        }
    })(id)
);
这将在i参数上创建一个闭包,该参数是对id的引用。 传递给事件侦听器的对象是一个在执行时将加载id的函数

您不需要action变量

您也可以将其隐藏在bindClickEvent对象中

var MapMarker = (function ($) {

    bindClickEvent = function (marker, action, id) {

        google.maps.event.addListener(marker, 'click', (function(i){ 
            return function(){
                action(i)
            }
        })(id));
    };

    return {

        bindClickEvent: bindClickEvent,
    };

})(jQuery);

MapMarker.bindClickEvent(marker, PartnerDetail.load, id)

嗨,谢谢,你是怎么通过的?我试过了,它在通话中被执行了你是说它成功了,但仍然想传递“id”?或者具体是什么?是的,我如何传递id?好的,有两种方法可以做到这一点,但由于它是一个谷歌库,我不会太乱。确保将属性添加到PartnerDetail类中,以便您轻松访问。在类内部使用{id:xx}。。另一种方法是通过ClassName.id访问它:将.bind添加到定义的函数,但这有点麻烦,因为bind需要在传递'id'之前指定'this'关键字。使用bind之前,请阅读更多有关bind的信息。