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

时间:2013-01-06 12:04:53

标签: 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>

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

<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'为null或不是对象

2 个答案:

答案 0 :(得分:5)

当您添加runat="server"时,idname呈现不同,可能会因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"不适用于name,但仅适用于id,因此如果您添加它并尝试保持ID相同,那么您必须通过id而不是名字来获取你的元素。

答案 1 :(得分:-1)

您可以使用控件的ID,但如果您有母版页,则可以使用该问题 模板或网格然后将更改ID。因此,您可以将客户端ID模式设置为静态,以便在这种情况下不会更改

示例

&LT;输入runat =“server”type =“text”name =“fileName”id =“fileName”class =“file_input_textbox”readonly =“readonly”/&gt;

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

示例:

document.getElementById(&lt;%= fileName.ClientID%&gt;);

希望这有用..