Событие OnClick для кнопки работает только в первом ряду таблицы
Я использую Google Maps Geocoding для поиска и отображения адреса из строки таблицы на моей странице JSP. Адрес извлекается из ключа сеанса. Каждая строка имеет адрес и кнопку, но в настоящее время кнопка работает только с адресом в первой строке. Я новичок в этом, поэтому извиняюсь, если терминология неверна.
Код сеансового ключа:
<tbody>
<c:forEach items="${SKALLUSERS}" var="tempuser">
<tr>
<td scope="row"><c:out value="${tempuser.getId()}"/></td>
<td>${tempuser.id}</td>
<td>${tempuser.email}</td>
<td>${tempuser.password}</td>
<td>${tempuser.firstName}</td>
<td>${tempuser.lastName}</td>
<td>${tempuser.userType}</td>
<td><input id="address" type="textbox"
value="${tempuser.address}"></td>
<td><a href="updateUser.jsp">Update</a></td>
<td><input id="submit" type="button" value="Geocode"></td>
</tr>
</c:forEach>
</tbody>
Google Maps Geocoding
<div id="floating-panel"></div>
<div id="map"></div>
<script>
function initMap() {
var map = new google.maps.Map
(
document.getElementById('map'),
{
zoom: 8,
center: {lat: -34.397, lng: 150.644}
}
);
var geocoder = new google.maps.Geocoder();
document.getElementById('submit').addEventListener
(
'click', function()
{
geocodeAddress(geocoder, map);
}
);
}
function geocodeAddress(geocoder, resultsMap)
{
var address = document.getElementById('address').value;
geocoder.geocode({'address': address}, function(results, status)
{
if (status === 'OK')
{
resultsMap.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker
({
map: resultsMap,
position: results[0].geometry.location
});
}
else
{
alert('Geocode was not successful for the following reason: + status);
}
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCH2nCSs1XR37Q6HdyUpZZfgP5_uMsi-vA&callback=initMap">
</script>
2 ответа
Ни в коем случае не эксперт, и я могу ошибаться, но, насколько я знаю, идентификаторы должны быть уникальными.
Попробуйте добавить класс к вашей кнопке отправки или индекс к идентификатору, что-то вроде "submit1", "submit2", а затем используйте: addEventListener у вас есть
document.getElementById('submit').addEventListener
Но используя другой, другой селектор, например getElementsByClassName, или текущий, если вы добавляете индекс, но получаете все элементы, чей идентификатор начинается с "submit".
Отнюдь не эксперт, и я тоже могу ошибаться.
Но, скорее всего, если только кнопка в первой строке таблицы в цикле forEach работает, как вы заявили, то и остальные должны работать.
За исключением, может быть, данных (т.е. items="${SKALLUSERS}"
) цикл, который вы просматриваете, как-то неверен, так что первый элемент, который приводит к первой строке таблицы, является единственным с ожидаемыми значениями, а остальные нет.