2011-10-11 34 views
1

我创建了一个简单的JS文件,名为formValueOperator.js,包含此功能:不能通过对象的getElementById外部JS文件在Chrome

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)上运行此功能时,它完全无法工作。

然后,我通过从formValueOperator.js和在HTML页粘贴其移动整个的setValue功能测试的代码。令人惊讶的是,它的工作。

Chrome浏览器如何将getElementByID对象传递给外部JS文件一定有些蹊跷。

任何人都可以帮助我在这一个?

回答

0

这是关于何时setInitValue()方法被解雇。

当您将方法移到JS文件之外并进入文档主体时,您可能会延迟执行该方法几毫秒,从而使您选择加载的元素时间。

使用jQueryready事件来执行您的代码,当一切都完成加载。

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

感谢您快速响应。 但是,经过测试,它仍然没有在Chrome上工作(但在FireFox上工作)。 – user989096

+0

在你的原始问题中,当你说“它不工作”时,你究竟是什么意思?你会得到什么错误? –

+0

没有显示错误,只是一个空白的文本框。 但是当我在FireFox上运行这个页面时,它在文本框中显示'aaa'。 – user989096

0

尝试这种方式,延缓方法执行,直到Web的页面已经被加载:

<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

HTML中没有用于输入的结束标记,HTML中也不存在自我结束标记。 –

+0

谢谢你的回应。但它仍然没有工作。 – user989096

+0

@Jamie Dixon:真的吗?但是这个怎么样? http://www.w3schools.com/tags/tag_input.asp – user278064