使用javascript模拟asp:按钮单击

时间:2013-01-16 14:48:45

标签: javascript asp.net

我尝试使用第二个按钮激活我的第一个按钮单击/命令 为了激活我的登录命令和组验证

我做错了什么?

第一个按钮

<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

4 个答案:

答案 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)

如果它是一个链接按钮,则可以执行以下操作:__doPostBack('ctl00$CP1$lnkBuscarEmpleado', '')

我刚刚在检查按钮时发现它。

https://i.stack.imgur.com/gXeg3.png