javascript - 如何在未定义的 getElementsByClass 上运行 addEventListener?
问题描述
我有一个搜索输入,它在用户键入时在其下方的 div 中填充建议,我想向建议 div 添加一个事件侦听器。问题是当页面加载时,建议 div 没有填充任何内容,因为用户尚未在搜索输入中键入任何内容并且它抛出
类型错误: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");
});
解决方案
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>
推荐阅读
- javascript - Webaudio:在响亮的同步声音后录制音频
- html - 折叠导航 - 悬停/单击时,如何使下拉菜单显示在“服务”导航链接下?
- python - 使用 Reticulate 运行带参数的 Python 脚本
- android - Notificationmanager.notify 不显示通知
- sql-server - SQL Server:在上次备份和日志备份运行超过一天时配置电子邮件通知
- javascript - 如何强制向上滚动 2 合一页 HTML 文档?
- visual-studio-code - 如何创建等效于 cuda makefile 的 ms vs code
- javascript - 为什么我的客户端在 jquery 更新(从 1.11.2 到 3.5.1)后没有收到带有 SignalR 的广播消息?
- asp.net - 识别混淆/加密方法
- angular - 嵌套 ControlValueAccessor 的角度验证状态未在父级中正确传播,如何实现此验证?