如何在未定义的getElementsByClass上运行addEventListener?

问题描述 投票:0回答:1

我有一个搜索输入,当用户键入内容时,该输入将在其下方的div中填充建议,我想在建议div中添加事件监听器。问题是页面加载建议div时未填充任何内容,因为用户尚未在搜索输入中键入任何内容,并且会引发

TypeError:searchSugg未定义

有没有解决的办法?我尝试将侦听器包装在if (searchSugg !== undefined) {...}中,尽管它不会引发错误,但它也不会运行addEventListener函数。

代码:

    var searchSugg = document.getElementsByClassName('mapboxgl-ctrl-geocoder--suggestion')[0];  
    searchSugg.addEventListener('click', function() {
        // // Create variables to use in isochrone API
        var urlBase = 'https://api.mapbox.com/isochrone/v1/mapbox/';
        var lng = geocoder.mapMarker._lngLat.lng;
        var lat = geocoder.mapMarker._lngLat.lat;
        var profile = 'cycling';
        var minutes = 10;
        // Create a function that sets up the Isochrone API query then makes an Ajax call
            var query = urlBase + profile + '/' + lng + ',' + lat + '?contours_minutes=' + minutes + '&polygons=true&access_token=' + mapboxgl.accessToken;
                    $.ajax({
                    method: 'GET',
                    url: query
                    }).done(function(data) {
                        map.getSource('iso').setData(data);
                    })
        map.addSource('iso', {
            type: 'geojson',
            data: {
            'type': 'FeatureCollection',
            'features': []
            }
        });
        map.addLayer({
            'id': 'isoLayer',
            'type': 'fill',
            // Use "iso" as the data source for this layer
            'source': 'iso',
            'layout': {},
            'paint': {
            // The fill color for the layer is set to a light purple
            'fill-color': '#5a3fc0',
            'fill-opacity': 0.3
            }
        }, "poi-label");
    });
javascript dom getelementsbyclassname
1个回答
1
投票

您可以在分配searchSugg处理程序之前检查click是否存在。

let searchSugg = document.getElementsByClassName("some-class-that-does-not-exist")[0];

searchSugg && searchSugg.addEventListener('click', event => {
  // click event handler code
});

// Or you can do
if (searchSugg) {
  searchSugg.addEventListener('click', event => {
    // click event handler code
  });
}
<p>Some Webpage</p>
© www.soinside.com 2019 - 2024. All rights reserved.