当 JavaScript 具有 document.getElementById('<%= 控件时,将 JavaS

Move JavaScript to an external file when it has document.getElementById('<%= control.ClientID%>') in it

本文关键字:控件 JavaS getElementById document JavaScript 具有      更新时间:2023-09-26

我有一个现有的 ASP.NET 网页,页面上内联了几百行JavaScript代码。

代码中充满了引用服务器端控件名称的代码,例如:

  function SetVisibility(isVisible) {
    document.getElementById('<%=someDiv.ClientID%>').style.display = (isVisible ? "block" : "none");
  }

如果我将脚本移动到外部.JS文件,则.不再解析 ClientID 引用,并且页面在一堆错误中折叠。

解决这个问题的最佳方法是什么? 我可以更改每个函数以将控件作为参数,或者我可以将 .getElementByID 替换为 $find()...但我希望有一种更简单/更快的方法。

您不能将内联 ASP.NET 语法(如<%= or <#)移动到外部 JavaScript 文件中。

您所需要的只是,您应该对元素 id 有适当的引用。

案例1:

ID

由运行时自动生成 ASP.Net 没有客户端 ID Moode 可用(ASP.Net <4.0)

解决方案

在.aspx页面中

<script type="text/javascript">
var myHtmlElementIDs={};
myHtmlElementIDs.ContainerDiv='<%=someDiv.ClientID%>';
</script>

在 JS 文件中

function SetVisibility(isVisible) {
    document.getElementById(myHtmlElementIDs.ContainerDiv).style.display 
     = (isVisible ? "block" : "none");
  }

案例2:

控制生成客户端 ID。没有母版页或嵌套控件 已使用或ClientIDMode=Static可用(ASP.Net>= 4.0)

解决方案:无需担心 ClientID,因为它不会被更改

function SetVisibility(isVisible) {
    document.getElementById('actualControlID').style.display 
     = (isVisible ? "block" : "none");
  }