Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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回调函数在运行时不保留参数?_Javascript_Callback_Leaflet_Android Webview - Fatal编程技术网

JavaScript回调函数在运行时不保留参数?

JavaScript回调函数在运行时不保留参数?,javascript,callback,leaflet,android-webview,Javascript,Callback,Leaflet,Android Webview,我在Android应用程序的WebView中使用JavaScript库传单来显示带有标记的地图。这些标记表示我的Android应用程序中的位置对象,因此通过调用JavaScript中的函数将位置及其id发送到JavaScript view.loadUrl("javascript:createLocationMarker(" + lat + "," + lon + "," + locationId + ");"); 我不知道这是否真的有必要知道,因为我猜问题似乎出在JavaScript中: fu

我在Android应用程序的WebView中使用JavaScript库传单来显示带有标记的地图。这些标记表示我的Android应用程序中的位置对象,因此通过调用JavaScript中的函数将位置及其id发送到JavaScript

view.loadUrl("javascript:createLocationMarker(" + lat + "," + lon + "," + locationId + ");");
我不知道这是否真的有必要知道,因为我猜问题似乎出在JavaScript中:

function createLocationMarker(lat, lon, locationId) {
    var marker = L.marker([lat, lon]).addTo(map).on('click', function(locationId) {
        Android.getLocationDetails(locationId);
    });
}
标记将在应创建标记的位置创建。很好! 问题在于绑定到标记的onClick回调函数。当用户单击标记时,将调用Android中的JavaScriptInterface。这可以正常工作,但是创建标记时传输的locationId的参数
Android.getLocationDetails()
始终为0。所以我猜JavaScript不会持久化locationId。我猜这是因为我调试了Android代码中的一行,该行调用函数
createLocationMarker()
,其中locationId的设置完全正确。另外,当我在JavaScript代码中硬编码locationId时,比如
Android.getLocationDetails(2)LocationID2被直接发送到Android中的JavascriptInterface。所以这一定是JavaScript的问题。

我希望有一些JavaScript漏洞可以帮助像我这样的noob解决这个问题。

您正在重写该变量(创建另一个同名的局部变量):

函数createLocationMarker(lat、lon、locationId){ var marker=L.marker([lat,lon]).addTo(map).on('click',函数(locationId){ getLocationDetails(locationId); }); }
请使用其他名称访问外部作用域上的
locationId

您的函数(locationId)有点错误,应该是function(event)@gaetanoM谢谢! function createLocationMarker(lat, lon, locationId) { var marker = L.marker([lat, lon]).addTo(map).on('click', function(locationId) { Android.getLocationDetails(locationId); }); }