2

html中的代码:

        <input type="text" name="fileName" id="fileName" class="file_input_textbox" readonly="readonly" />

        <div class="file_input_div">
          <input type="button" value="Search files" class="file_input_button" />
          <input type="file" class="file_input_hidden" onchange="javascript: document.getElementsByName('fileName')[0].value = this.value" />
        </div>

它工作正常。但如果我会这样写:

<input runat="server" type="text" name="fileName" id="fileName" class="file_input_textbox" readonly="readonly" />

    <div class="file_input_div">
      <input type="button" value="Search files" class="file_input_button" />
      <input type="file" class="file_input_hidden" onchange="javascript: document.getElementsByName('fileName')[0].value = this.value" />
    </div>

它不起作用,错误:document.getElementsByName(...).0' is null or not an object

4

2 回答 2

5

当您添加runat="server"thenid并且name呈现不同并且可能由 asp.net 更改

要获取呈现的名称,请使用UniqueID并将其获取为<%=fileName.UniqueID%>,因此必须按原样完成代码:

<input runat="server" type="text" name="fileName" id="fileName" class="file_input_textbox" readonly="readonly" />

    <div class="file_input_div">
      <input type="button" value="Search files" class="file_input_button" />
      <input type="file" class="file_input_hidden" 
         onchange="javascript: document.getElementsByName('<%=fileName.UniqueID%>')[0].value = this.value" />
    </div>

我验证它,就是这样,当它被添加到母版页中时,名称和 ID 会发生变化。如果它们单独在没有母版页的页面上,那么它们将保持原样,但如果您将它们添加到母版页上,它们会发生变化,您需要通过呈现的 id 获取它们。

请注意,clientidmode="Static"输入控件上的 the 不适用于 the ,name而仅适用于 the ,id因此如果添加它并尝试保持 id 相同,则必须通过 id 而不是名称获取元素。

于 2013-01-06T12:11:43.063 回答
-1

您可以使用控件的 ID,但如果您有母版页,并且您使用的是模板或网格,那么 ID 将被更改。因此,您可以将客户端 ID 模式设置为静态,这样在这种情况下就不会更改

例子

< input runat="server" type="text" name="fileName" id="fileName" class="file_input_textbox" readonly="readonly" />

或者您可以获取控件的客户端 ID。

例子 :

document.getElementById(<%= fileName.ClientID %>);

希望这有帮助..

于 2013-01-06T12:27:24.627 回答