3

当我在页面标记中有这个时,它工作正常:

<script type="text/javascript">
    function bought1()
    {
        var s = '<%= Button2.ClientID %>';
        var v = document.getElementById(s);
        v.click();
    }    
</script>

但是当我在一个单独的文件中有相同的东西时,即使该函数执行 - 的值v仍然是null

我尝试了一个简单的div,它确实找到了div.

为什么找不到 ASP.net 按钮?

编辑

我什至添加ClientIDMode="Static"了按钮。不用找了。

4

4 回答 4

9

<%= Button2.ClientID %>是服务器代码。您不能在单独的 javascript 文件中运行服务器代码。

如果您想从单独的 javascript 访问服务器控制 ID,您需要将其ClientIDMode设置为可预测的或静态的。

这是一个例子。

下面是一段代码。这不是一个很好的例子,但我希望你能明白。

注意:确保在使用ClientIDMode="Static". 否则,ID 将发生冲突。例如,一个在母版页中,一个在内容页中。

ASPX

<script src="/JavaScript1.js"></script>
<asp:Button runat="server" ID="Button1" ClientIDMode="Static" 
    Text="I am a button" />
<div onclick="bought1()">Click Me</div>

Javascript 文件

function bought1() {
    var s = 'Button1';
    var v = document.getElementById(s);
    v.click();
}

在此处输入图像描述

于 2013-07-17T14:56:06.037 回答
4

Win是正确的,你单独的JS文件不会被ASP.net渲染。

但是,如果你简单地把

<script type="text/javascript">
        var s = '<%= Button2.ClientID %>';
</script>

在加载外部文件的位置上方,您会将值加载到页面上的全局变量中,可以从其后加载的任何脚本访问该全局变量。只要确保给它起一个不会与您加载的任何库冲突的名称。

于 2013-07-17T14:51:06.427 回答
2

您应该像这样更改功能:

function bought1(clientId)
{
    var s = clientId;
    var v = document.getElementById(s);
    v.click();
}    

并在您的页面标记中调用它:

bought1('<%= Button2.ClientID %>')
于 2013-07-17T15:05:35.953 回答
1

或者,如果您想避免 JS 全局变量的混乱并完全转储 asp.net 变量,只需包装您的按钮并使用查询选择器(或 jquery 等)来抓取它:

ASP.NET:

<div id="button-container">
        <asp:Button ID="button" runat="server" />
</div>

JS:

<script type="text/javascript">
    function bought1()
    {
        var v = document.querySelector("#button-container input");
        v.click();
    }    
</script>
于 2013-07-17T15:17:31.883 回答