如果我写了runat ="server",javascript代码出错

use*_*942 2 javascript asp.net

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>
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

它没有工作woth错误:document.getElementsByName(...).0'是null或不是对象

Ari*_*tos 5

当你添加runat="server"然后id,它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>
Run Code Online (Sandbox Code Playgroud)

我验证它,就这样,名称和ID在母版页中添加时会发生变化.如果他们在一个没有母版页的页面上独自一人,那么它们会保持不变,但是如果你将它们添加到母版页上,它们就会改变,你需要通过渲染的id来获取它们.

请注意,clientidmode="Static"输入控件上的输入控件不起作用,name但仅限于此,id如果添加它并尝试保持id相同,则必须按ID而不是按名称获取元素.