исчезающая карта Google - PullRequest
       1

исчезающая карта Google

2 голосов
/ 26 февраля 2011
> <script type="text/javascript"
    src="http://maps.google.com/maps/api/js?sensor=true">
</script>
<script type="text/javascript">
  function initialize() {
    var latlng = new google.maps.LatLng(-34.397, 150.644);
    var myOptions = {
      zoom: 8,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"),
        myOptions);
    marker = new google.maps.Marker({
    position : latlng,
    title : "hello world",
    draggable : true
    });
   marker.setMap(map)
  }
  function write(){
    //var positon = marker.getPosition()
    alert('position')
  }
</script>
</head>
<body onload="initialize()">
  <div id="map_canvas"></div>
  <input type='button' value ='position' onClick="write()">
</body>
</html>

всякий раз, когда я нажимаю на кнопку, называемую положением, карта исчезает, почему это так?

Ответы [ 2 ]

15 голосов
/ 26 февраля 2011

+ 1 ответ Йенса правильный. Однако высказывание write обычно не должно давать вам document.write. window свойства действуют как глобальные, но document свойства не:

function write(){
    alert('position')
}

mybutton.onclick= function() {
    write(); // this is fine!
};

Хитрость в том, что когда вы пишете встроенный атрибут обработчика события, свойства этого элемента и его предковых элементов сбрасываются в вашу область видимости. Я не уверен, что это где-то задокументировано, и, конечно, точное поведение будет отличаться в разных браузерах, но это старая, устоявшаяся и очень опасная функция:

<input onclick="alert(value);" value="A"/>  // alerts A

<form method="get"><input onclick="alert(method)"/></form> // alerts get

Поскольку document является главным предком всех узлов DOM на странице,

<div onclick="alert(write)"/> // alerts the `document.write` function

Это означает, что вы не можете ссылаться на какую-либо глобальную переменную или функцию в атрибуте встроенного обработчика событий, имя которого совпадает с именем узла-предка. А поскольку новые версии браузеров выпускаются постоянно, вводятся новые свойства DOM, любая использование любая глобальная переменная или функция в атрибуте обработчика событий, вероятно, сломается в будущем.

Это еще одна причина, по которой мы никогда не используем встроенные атрибуты обработчика событий .

[Все эти примеры предполагают, что alert разрешается в window.alert, то есть никто не помещал свойство alert ни в один из узлов DOM-предков ...]

2 голосов
/ 26 февраля 2011

write () - это зарезервированная функция Javascript - когда вы вызываете ее, вы выполняете document.write (), который (поскольку вы вызываете ее после того, как документ уже закончен запись) переписываетвся страница.

Попробуйте вместо этого переименовать его в myWrite ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...