Javascript错误:无法获取';单击';指未定义的或空的引用
我有以下项目在我的网站有母版页Javascript错误:无法获取';单击';指未定义的或空的引用,javascript,c#,jquery,asp.net,Javascript,C#,Jquery,Asp.net,我有以下项目在我的网站有母版页 <asp:Content ID="Content5" ContentPlaceHolderID="ContentPlaceHolder4" Runat="Server"> <div class="div-data-upload"> <asp:UpdatePanel ID="UpdatePanel2" runat="server"> <Triggers>
<asp:Content ID="Content5" ContentPlaceHolderID="ContentPlaceHolder4" Runat="Server">
<div class="div-data-upload">
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<Triggers>
<asp:PostBackTrigger ControlID="btnUpload" />
</Triggers>
<ContentTemplate>
<asp:FileUpload ID="upldExcelTemplate" runat="server" Visible="false" />
<asp:TextBox ID="txtBrowse" runat="server"></asp:TextBox>
<asp:Button ID="btnBrowse" CssClass="btn btn-default" runat="server" Text="Browse" />
<asp:Button ID="btnUpload" CssClass="btn btn-default" runat="server" Text="Upload" OnClick="btnUpload_Click" />
<asp:Button ID="btnSubmit" CssClass="btn btn-default" runat="server" Text="Submit" OnClick="btnSubmit_Click" Enabled="False" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</asp:Content>
所有这些代码都以“Javascript错误:无法获取未定义或空引用的'click'属性”结尾
如何解决此问题?您需要获取服务器控件的客户端id
document.getElementById("<%=upldExcelTemplate.ClientID%>").click();
document.getElementById(“”)。单击();
如果你想要它,jquery
$(#"<%=upldExcelTemplate.ClientID%>").get()[0].click();
$(#“”).get()[0]。单击();
upd:
<button onclick="fileBrowse('<%=FileUpload1.ClientID%>')">click</button>
<script>
function fileBrowse(obj) {
document.getElementById(obj).click();
}
</script>
点击
函数文件浏览(obj){
document.getElementById(obj).click();
}
看起来山本哲也已经指出,Visible=false是错误的原因
因此,我将FileUpload控件放入一个div中,并显示为:none;具体如下:
<ContentTemplate>
<div class="none">
<asp:FileUpload ID="upldExcelTemplate" runat="server" />
</div>
<asp:TextBox ID="txtBrowse" runat="server"></asp:TextBox>
<asp:Button ID="btnBrowse" CssClass="btn btn-default" runat="server" Text="Browse" />
<asp:Button ID="btnUpload" CssClass="btn btn-default" runat="server" Text="Upload" OnClick="btnUpload_Click" />
<asp:Button ID="btnSubmit" CssClass="btn btn-default" runat="server" Text="Submit" OnClick="btnSubmit_Click" Enabled="False" />
</ContentTemplate>
.none {
display: none
}
protected void Page_Load(object sender, EventArgs e)
{
btnBrowse.Attributes.Add("onclick", "document.getElementById('" + upldExcelTemplate.ClientID + "').click(); return false;");
}
.没有{
显示:无
}
受保护的无效页面加载(对象发送方、事件参数e)
{
btnBrowse.Attributes.Add(“onclick”、“document.getElementById(““+upldExcelTemplate.ClientID+”))。单击();返回false;”;
}
你的ID不是你想象的那样-看看浏览器中的源代码,你会发现有两个同名函数出现了混乱,因为这可能意味着控件没有在客户端呈现,JS无法访问。尝试使用包含选择器的CSS类将控件隐藏在客户端“display:none;”“
@brk没有两个同名函数。。。我向你们展示的是我试图让它工作的代码示例。。。其中有3个…@Fahmieyz:@brk在您的问题中提到fileBrowse
函数以相同的名称声明了两次(我希望当前只设置了其中一个)。但问题很可能来自控件可见性而不是客户端ID。我是否可以编辑代码以便将其用作fileBrowse(obj)。。。我尝试使用document.getElementById(obj).click();where obj=“”但似乎我的服务器标签是错误的
<ContentTemplate>
<div class="none">
<asp:FileUpload ID="upldExcelTemplate" runat="server" />
</div>
<asp:TextBox ID="txtBrowse" runat="server"></asp:TextBox>
<asp:Button ID="btnBrowse" CssClass="btn btn-default" runat="server" Text="Browse" />
<asp:Button ID="btnUpload" CssClass="btn btn-default" runat="server" Text="Upload" OnClick="btnUpload_Click" />
<asp:Button ID="btnSubmit" CssClass="btn btn-default" runat="server" Text="Submit" OnClick="btnSubmit_Click" Enabled="False" />
</ContentTemplate>
.none {
display: none
}
protected void Page_Load(object sender, EventArgs e)
{
btnBrowse.Attributes.Add("onclick", "document.getElementById('" + upldExcelTemplate.ClientID + "').click(); return false;");
}