在 javascript 中将参数传递给回调函数

Passing arguments to a callback function in javascript

我们有这样的场景,我们有多个 <input type="text"/> 框,我们在其中绑定自动建议 (BING MAPS),如下所示。

Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', function () {
            var options = {
                maxResults: 4,
                    map: map
            };
            var manager = new Microsoft.Maps.AutosuggestManager(options);
                            
            var callback = {
                    selectedAddedDestination : selectedAddedDestination.bind({})
            }
                            
            callback.selectedAddedDestination['pos'] = destinationIndex;
                            
            manager.attachAutosuggest('#destination'+destinationIndex+'', '#divAddDestination', callback.selectedAddedDestination);
                            
        });

其中“#destination1”或#destination2 是 <input type="text"> 元素的 ID。 我们有一个函数 selectedAddedDestination,它由 Bing 地图框架调用并接受自动建议的结果。但是,结果不包含哪个 <input type="text"> 触发了事件。

function selectedAddedDestination(suggestionResult) {
                        
        var func = selectedAddedDestination;
        var position = func['pos']
        map.entities.clear();
        map.setView({ bounds: suggestionResult.bestView });
        ........
}

我尝试在函数中添加 属性 'pos'。但是,它不可访问。对于每个文本框,我还需要 'pos' 属性 的多个函数实例,因此需要函数。

如果有解决办法请告诉我。

你可以像这样用 JavaScript closure 来做到这一点:

Microsoft.Maps.loadModule("Microsoft.Maps.AutoSuggest", function () {
  var options = {
    maxResults: 4,
    map: map,
  };
  var manager = new Microsoft.Maps.AutosuggestManager(options);

  manager.attachAutosuggest(
    "#destination" + destinationIndex + "",
    "#divAddDestination",
    selectedAddedDestination(destinationIndex)
  );
});

function selectedAddedDestination(destinationIndex) {
  return function (suggestionResult) {
    map.entities.clear();
    map.setView({ bounds: suggestionResult.bestView });
    // Do what you want with destinationIndex
  };
}