我有一个问题。我有一个aspx控件(例如文本框)。我使用document.getElementById('<%= textbox.ClientID%>')。value来引用它。当我在同一个aspx文件中有代码时,它可以工作。但是,尽快从外部文件(例如MyJSFunctions.js)引用它,我无法做到。我收到一条错误,说“对象不存在或者为空”
我已经包含了像
这样的js文件的名称我这样做是因为我喜欢将所有js函数放在一个单独的文件中,这样做也可以减少负载开销。
为什么会这样?我可以使用jquery完成同样的工作吗?
答案 0 :(得分:4)
您需要参数化Javascript以接受所需的参数,然后将服务器端页面中的内联ASP.NET脚本或控件作为其值传递。这将允许引擎适当地呈现内联代码。
这是因为服务器在推送之前呈现您的页面(不是在浏览器呈现HTML的意义上,而是在ASP.NET引擎进行转换以将您的.NETified Web标记转换为标准Web标记)它们只发生在客户端 - 这只会发生在“注册”类型中,而且不会(也不应该)包含Javascript文件(尽管可以技术上注册要处理的项目,除非你有一个定制模块来处理Javascript中内联脚本的编译,无论如何它都会出错。)
jQuery本质上是一个Javascript框架的东西,你可以说是同一条船,可以这么说。
例如,请考虑以下内容......
您的脚本文件:
function doSomethingJavascripty(withThisClientID) {
//do something with...
document.getElementById(withThisClientID).value;
}
您的ASPX页面:
<script type="text/javascript" src="/path/to/script.js"><script>
<script type="text/javascript">
//call your function when appropriate...
doSomethingJavascripty('<%=textbox.ClientID%>');
</script>
答案 1 :(得分:2)
您可以做的一件事是在ASPX页面中使用以下Javascript代码:
var myTextbox = '<%=textbox.ClientID%>';
然后,在您的外部JS文件中(确保在上面的行之后),请:
document.getElementById(myTextbox).value
另一个替代方法是将ClientID硬编码到代码中,但请注意,如果您将来更改该文本框控件的ID或父容器,则会将其破坏。