Получить элемент, используя идентификатор проблемы - PullRequest
0 голосов
/ 15 мая 2009

Я изменяю существующие устаревшие веб-страницы (которые я не должен изменять существующие части, но добавляю), и веб-страница использует document.write для написания определенных HTML-элементов. когда я использую

<script type="text/javascript" language="javascript">
   var  v = document.getElementById('td_date_cal_0');
   alert(v);
</script>

v становится нулевым, и когда я создаю кнопку и нажимаю

<input type="button" id="mnbutton" onclick="mnLoader();" value="Click Me!" />;
<script type="text/javascript" language="javascript" >
    function mnLoader() {
        var v = document.getElementById("td_date_cal_0");
        alert(v); 
    } <br />

</script>

Есть идеи, как получить элемент без необходимости действий пользователя, таких как нажатие?

Спасибо, Эбе

Ответы [ 5 ]

8 голосов
/ 15 мая 2009

Попробуйте присоединить скрипт к событию onload либо document, либо window.

function mnLoader() {
 var v = document.getElementById("td_date_cal_0");
 alert(v); 
}
// Execute the function after the page has loaded
document.onload = function() {
 mnLoader();
}
1 голос
/ 15 мая 2009

Я ожидаю, что это происходит потому, что сценарий выполняется до того, как был создан элемент с идентификатором "td_date_cal_0".

Попробуйте переместить скрипт под элемент, которым он манипулирует, или подключите код к событию document.onload.

1 голос
/ 15 мая 2009

Я предполагаю, что вы помещаете свой элемент скрипта перед элементом, который вы пытаетесь получить.

Самый простой способ решить эту проблему - поместить элемент script непосредственно перед тегом END для элемента body.

0 голосов
/ 01 июля 2013

следующий код работает правильно.

<input type="text" id="xxxx"/>
<input type="button" id="mnbutton" onclick="mnLoader();" value="Click Me!" />;
<script>
        function mnLoader() {
        var v = document.getElementById("xxxx").value;
        alert(v); 
        }
</script>
0 голосов
/ 15 мая 2009

@ Матиас привел пример, который, скорее всего, исправит вашу проблему. Это означает, что элемент, к которому вы пытаетесь получить доступ с помощью document.getElementById, еще не был загружен в DOM во время его попытки.

Однако, если вы заинтересованы в возможности запустить ваш код как можно раньше, лучшим решением будет наблюдение за событием "dom :loaded" или событием готовности DOM. Это немного сложнее, чем вызов window.onload , но может помочь такая структура, как Prototype.js или jQuery .

См. на этой странице , на которой Майкл Шарман говорит именно об этой функции.

Затем вы можете написать код, такой как:


document.observe(document, 'dom:loaded', initFunction);   

function initFunction()  
{  
  // this code will run as soon as DOM is loaded, 
  // but before any images are loaded
}

Очевидно, что если вы не хотите использовать фреймворк, вы можете повторить поведение, используя только стандартные вызовы javascript, но вы должны быть готовы к тому, чтобы справиться с различиями между браузерами. Вы можете начать с просмотра события onreadystatechanged и аналогичных событий для других браузеров (например, DOMContentLoaded )

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