-1

头部

<script type="text/javascript" >
 function ChangeColor1(elementid) {
document.getElementById(elementid).style.backgroundImage = "url('images/1.jpg')";
document.getElementById("<%= img2.ClientID%>").style.backgroundImage = "url('images/2.jpg')";
document.getElementById("<%= imgchange.ClientID%>").style.backgroundImage = "url('images/img1.JPG')";
}

function ChangeColor2(elementid) {
document.getElementById(elementid).style.backgroundImage = "url('images/1.jpg')";
document.getElementById("<%= img1.ClientID%>").style.backgroundImage = "url('images/2.jpg')";
document.getElementById("<%= imgchange.ClientID%>").style.backgroundImage = "url('images/img2.JPG')";
}
</script>

身体的一部分

  <table >
<tr>
<td id="img1" runat="server" onmouseover="ChangeColor1(this.id)" style="background-image: url('images/2.jpg')">
</td>
</tr>
<tr>
<td id="img2" runat="server" onmouseover="ChangeColor2(this.id)" style="background-image: url('images/2.jpg')">
</td>
</tr>
<tr>
<td id="imgchange" runat="server">
</td>
</tr>
</table>

这里一切正常,但是当我将上述脚本放在.js 文件中时,它无法正常工作。

我认为,当我过去在 img1 上执行 onmouseover 时,它的 id 被传递但 id="img2" 和 id="imgchange" 没有传递给 .js 文件

所以会出现这个问题。我应该如何通过我的控制 id="img2" 和 id="imgchange" onmouseover 到 id="img1"

4

4 回答 4

1

这可能不优雅。

您可以在 JavaScript 中声明变量,例如您的 aspx 页面

<script>
   var img1 = '<%= img1.ClientID%>';
</script>

在您的外部 js 文件中,使用这些变量

 document.getElementById(img1).style.backgroundImage 

编辑:

在 aspx 页面中

<script>
   var img1 = '<%= img1.ClientID%>';
   var imgchange= '<%= img2.ClientID%>';
   var imgchange= '<%= imgchange.ClientID%>';
</script>

在 JavaScript 文件中

<script type="text/javascript" >
 function ChangeColor1(elementid) {
        document.getElementById(elementid).style.backgroundImage = "url('images/1.jpg')";
        document.getElementById(img2).style.backgroundImage = "url('images/2.jpg')";
        document.getElementById(imgchange).style.backgroundImage = "url('images/img1.JPG')";
    }

function ChangeColor2(elementid) {
        document.getElementById(elementid).style.backgroundImage = "url('images/1.jpg')";
        document.getElementById(img1).style.backgroundImage = "url('images/2.jpg')";
        document.getElementById(imgchange).style.backgroundImage = "url('images/img2.JPG')";
    }
</script>
于 2013-08-21T12:11:39.147 回答
0

我必须说,这个问题不是太明显或太清楚,但是,当你在 abc.js 文件中有这个方法时,你必须在你的 HTML 中包含 abc.js。

IE

<script src="..<path>/abc.js"></script>
于 2013-08-21T11:59:16.867 回答
0

我猜这是因为 js 扩展未注册为由 isapi.dll 处理,而 Asp.Net 引擎需要使用适当的值替换这些调用。

请参阅这篇文章,了解如何为此配置 IIS:

http://www.iis.net/configreference/system.webserver/security/isapicgirestriction/add

于 2013-08-21T11:59:33.297 回答
0

让我们再看看问题。js 文件由 IIS 静态提供,没有进程。aspx 文件被传递给 aspnet_isapi.dll,然后被处理,结果就是发送给客户端的结果。一段代码

"<%= img2.ClientID%>" 

不是 javascript,它是 Asp.Net 代码。当此代码在 Asp.Net 页面内时,它由 aspnet_isapi.dll 解释,并由 Asp.Net 分配给客户端控件的控件 ID 替换。但是当这段代码被移动到一个 js 文件扩展名时,它是直接提供的,没有经过 aspnet_isapi.dll 处理,这就是为什么 Asp.Net 代码不会为控件的 id 更改的原因。

到目前为止,您可以看到我之前关于如何将 js 文件扩展名传递给 aspnet_isapi.dll 的链接,或者您可以看到关于如何使 Asp.Net 控件的 ids 静态化的其他链接,因此您可以删除“<%= img2.ClientID%>" 来自js的代码并自己替换为适当的值。

http://weblogs.asp.net/asptest/archive/2009/01/06/asp-net-4-0-clientid-overview.aspx

希望这现在很清楚。

于 2013-08-21T12:49:34.800 回答