我尝试使用第二个按钮激活我的第一个按钮单击/命令 为了激活我的登录命令和组验证
我做错了什么?第一个按钮
<asp:Button ID="LoginButtonInvis" runat="server" CommandName="Login"
ValidationGroup="Login1"
visible ="false"/>
</asp:Button>
第二个按钮
<button name="submit" runat="server"onclick="document.getElementById('LoginButtonInvis').Click();">
<i class="icon-arrow-right icon-large"></i>
</Button>
我得到的错误:
Microsoft JScript runtime error: Unable to get value of the property 'Click': object is null or undefined
答案 0 :(得分:2)
默认情况下,ASP.NET将父ID附加到控件以维护元素的唯一ID。这是正确的行为。
此外,JavaScript区分大小写。所有活动都以小写字母开头。有些浏览器有.click()
而其他浏览器有.onclick()
,因此下面的代码是我能提供的最佳代码,而不会更改代码的其他部分:
onclick="var b = document.getElementById('<%=LoginButtonInvis.ClientID%>'); if (b.click) b.click(); else if (b.onclick) b.onclick();"
另外,通过添加type="button"
确保第二个按钮不是提交按钮,否则会导致表单提交两次。
编辑:仅当文档中存在第一个按钮时,此选项才有效。使用您当前的代码,由于您拥有的Visible="false"
,它不存在。要在保持隐藏状态的同时发送它,请移除Visible="false"
并将其添加到您的代码中:
LoginButtonInvis.Style["display"] = "none";
或者将CSS类应用于“display:none;”规则。
为了避免使用内联JavaScript,以及更好的跨浏览器支持(IE,是),您最好在页面中添加JavaScript块:(无论在哪里)
<script type="text/javascript">
function SimulateClick(buttonId) {
var button = document.getElementById(buttonId);
if (button) {
if (button.click) {
button.click();
}
else if (button.onclick) {
button.onclick();
}
else {
alert("DEBUG: button '" + buttonId + "' is not clickable");
}
} else {
alert("DEBUG: button with ID '" + buttonId + "' does not exist");
}
}
</script>
现在只有第二个按钮:
<button name="submit" onclick="SimulateClick('<%=LoginButtonInvis.ClientID%>');"><i class="icon-arrow-right icon-large"></i></button>
另请注意,第二个按钮不需要runat="server"
,只会导致<%=
无效并使事情复杂化。
答案 1 :(得分:0)
尝试不同的方法
在提交按钮上单击调用javascript并设置隐藏变量字段
function SetValue()
{
//set hidden field value
form.submit();
}
将控件转移到page_load
事件。如果设置了hidden field
,请执行相应的LoginButtonInvis
命令。并且不要忘记重置隐藏字段
希望这有帮助
答案 2 :(得分:0)
我认为原始代码的唯一问题是click方法应该都是小写的:
onclick="document.getElementById('LoginButtonInvis').click();
答案 3 :(得分:0)