ReferenceError:函数未定义

时间:2016-11-04 11:19:14

标签: javascript referenceerror

我正在尝试调用javascript方法。我正在通过字符串连接在运行时构建html。

$scope.getRoute = function (isRouteFormValid) {
    routingDemoPageService.executeService(serviceURL, 'admin', 'admin').then(function (response) {
        function tryingOnceAgain() {
            alert('called.....');
        }

        var markers = L.markerClusterGroup({
            showCoverageOnHover:false,
            chunkedLoading: true
        });

        var geojsonLayer = L.geoJson(response, {
            onEachFeature: function(feature, layer){

            var UIDValue = (feature.properties['uid'] !== null ? Autolinker.link(String(feature.properties['uid'])) : '');

            var popupContent = '<table>' +
                            '<tr><th scope="row"><a href="javascript:tryingOnceAgain()">Edit</a></th><td></td></tr>' +

                            '<tr><th scope="row">uid</th><td>' + UIDValue + '</td></tr></table>';

             layer.bindPopup(popupContent);
         }
     });
     markers.addLayer(geojsonLayer);
     $scope.map.addLayer(markers);
     $scope.map.fitBounds(markers.getBounds());

   })['catch'](function (error) {

 });

}

当我点击调用tryingOnceAgain方法的链接时,我收到以下错误

  

ReferenceError:未定义tryingOnceAgain

我不确定为什么会出现以下错误。

有人可以提供任何指示我做错了什么。

2 个答案:

答案 0 :(得分:2)

javascript:tryingOnceAgain()被引用到全局范围内的函数,但您在tryingOnceAgain范围内定义了function (response) {函数。

要解决此问题,您必须将tryingOnceAgain功能移至全局范围。

或者只是将其分配给window对象而不更改实际位置:

window.tryingOnceAgain = function() {...}

答案 1 :(得分:1)

tryingOnceAgain()的函数定义仅在定义它的函数内存在,在本例中为$scope.getRoute()

这使得只有$scope.getRoute()内的代码可以调用tryingOnceAgain()并且它将会运行。

您必须在tryingOnceAgain()之外定义$scope.getRoute()或将其设为公共属性,并将其称为HTML内部。