Невозможно передать объект getElementByID во внешний файл JS в Chrome - PullRequest
1 голос
/ 11 октября 2011

Я создал простой JS-файл с именем formValueOperator.js , содержащий эту функцию:

function setValue(type, obj, value){
if(type == 'text')
{
    obj.value = value;
}

и другая HTML-страница, вызывающая эту функцию:

<HTML>
   <HEAD>
      <title>Simple Test</title>
      <script type="text/javascript" src="formValueOperator.js"></script>
      <script type="text/javascript">
         function setInitValue(){
              var element_order_id = document.getElementById("order_id");
              setValue('text', element_order_id, 'aaa');
         }
      </script>
   </HEAD>
   <BODY>
         <FORM name="myform" method="post">
              <input type="text" size=20 id="order_id" name="order_id">
         </FORM>
         <script type="text/javascript">
              setInitValue();
         </script>
   </BODY>
</HTML>

Это довольно простая операция:

Запустить HTML -> вызвать функцию setInitValue () -> поместить 'aaa' в текстовое поле.

Все отлично работает на FireFox (7.0.1). Однако, когда я попытался запустить это на Chrome (14.0.835.202), это не сработало вообще.

Затем я протестировал код, переместив всю setValue функцию из formValueOperator.js и вставил ее на HTML-страницу. Удивительно, но это сработало.

Должно быть что-то подозрительное в том, как Chrome передает объект getElementByID во внешний файл JS.

Может ли кто-нибудь помочь мне в этом?

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

Попробуйте, таким образом, отложить выполнение метода до загрузки веб-страниц:

<FORM name="myform" method="post">
   <input type="text" size=20 id="order_id" name="order_id" />
</FORM>

<script type="text/javascript">
   window.onload = function() {
      setInitValue();
  };
</script>
0 голосов
/ 11 октября 2011

Это связано с срабатыванием метода setInitValue().

Когда вы перемещаете свой метод за пределы файла JS и в тело документа, вы, вероятно, откладываете выполнение метода на несколько миллисекунд, давая элементу, который вы выбираете, время загрузки.

Используйте событие jQuery * ready для выполнения кода после завершения загрузки.

$(document).ready(function(){
  setInitValue();
 }
);
...