#javascript #html #google-maps-api-3
#javascript #HTML #google-maps-api-3
Вопрос:
В Google maps v3 я использую информационное окно. Я использую следующую переменную в качестве содержимого infowindow (потому что я не знаю, как использовать a в этой ситуации).
var inputForm = 'Name: <input type="text" id="nameinput" size="31" maxlength="31" tabindex="1" />' '<input type="hidden" id="pinId" value="' counter '" />' '<button id="inputButton">Submit</button>';
Проблема в том, что в окне infowindow «скрытый» ввод требует дополнительной вкладки для пользователя. Я прочитал ответы в SO, которые предлагают использовать <div
with display: none
, но я не знаю об использовании <div
в переменной, подобной my inputForm
.
Как я могу удалить ненужную вкладку?
РЕДАКТИРОВАТЬ код:
Чтобы протестировать этот код, щелкните где-нибудь, и появится маркер с информационным окном. Щелкните внутри пузырька, а затем используйте Tab, чтобы увидеть, что он останавливается между текстовым полем и кнопкой Отправки.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map-canvas { height: 100% }
</style>
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js">
</script>
<script type="text/javascript">
var map;
var inwindow = new google.maps.InfoWindow();
var markers = [];
var counter = 0;
function initialize() {
var NY = new google.maps.LatLng(40.739112, -73.785848);
map = new google.maps.Map(
document.getElementById('map-canvas'), { center: NY, zoom: 16, mapTypeId: google.maps.MapTypeId.ROADMAP });
google.maps.event.addListener(map, 'click', function (event) {
addMarker(event.latLng);
});
google.maps.event.addListener(inwindow, 'domready', function () {
var button = document.getElementById('inputButton');
button.onclick = function() {
var input = document.getElementById('nameinput').value;
var id = parseInt(document.getElementById('pinId').value);
titleMarker(id, input);
inwindow.close();
};
});
function addMarker(location) {
counter ;
var inputForm = 'Name: ' '<input type="text" id="nameinput" size="31" maxlength="31" tabindex="1" />' '<input type="hidden" id="pinId" value="' counter '" tabindex="-1" />' '<button id="inputButton">Submit</button>';
var marker = new google.maps.Marker({
position: location,
map: map,
draggable: true,
id: counter
});
inwindow.setContent(inputForm);
inwindow.open(map, marker);
markers.push(marker);
}
function titleMarker(markerId, markerTitle) {
for (var i=0; i<markers.length; i ) {
if (markers[i].id === markerId) {
markers[i].setTitle(markerTitle);
}
}
}
google.maps.event.addDomListener(window, "load", initialize);
</script>
</head>
<body>
<div id="map-canvas"/>
</body>
</html>
Ответ №1:
Если вы не хотите, чтобы элемент отображался с вкладками, установите для tabindex значение -1
, которое удаляет элемент из tabindex
var inputForm = 'Name: '
'<input type="text" id="nameinput" size="31" maxlength="31" tabindex="1" />'
'<input type="hidden" id="pinId" value="' counter '" tabindex="-1" />'
'<button id="inputButton">Submit</button>';
Комментарии:
1. Я не знал,
type="hidden"
что элементы могут быть с вкладками в первую очередь.2. @NiettheDarkAbsol — Я тоже не был, я думаю, что более старый IE сохранял бы скрытые элементы в порядке табуляции, но OP утверждает, что это то, что происходит в Картах Google, и способ удалить элемент из порядка табуляции — установить tabindex в отрицательное значение.
3. Происходит что-то сумасшедшее. Когда я помещаю ваш ответ в JSFiddle, я не получаю вкладку с вашим добавлением индекса табуляции -1 или без него. Но тогда ваш ответ ничего не меняет в моем Chrome на Mac как отдельный HTML-файл. Я добавлю полный тестовый код к вопросу, чтобы посмотреть, не является ли причиной разницы что-то еще, например, заголовок.
Ответ №2:
Обязательно ли это быть скрытым вводом? Почему бы просто не сохранить значение в качестве атрибута данных на самом входе?
var inputForm = 'Name: '
'<input type="text" id="nameinput" size="31" maxlength="31" tabindex="1" data-pinid="' counter '" />'
'<button id="inputButton">Submit</button>';
Тогда вы могли бы получить его следующим образом:
var input = document.getElementById('nameinput').value;
var id = parseInt(input.getAttribute('data-pinid'));
Комментарии:
1. Это отличная идея, но когда я ввожу ваше определение в свой код, я все равно получаю дополнительную вкладку. Что я делаю не так? (Должен признать, мне трудно запустить приведенный выше код. Я продолжаю получать ошибку «Uncaught SyntaxError: неожиданный конец ввода»)