使用JavaScript模拟点击asp:button

4
我试图通过第二个按钮来激活我的第一个按钮的点击/命令,以便激活我的登录命令和组验证。
我做错了什么?
第一个按钮。
<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>

我得到的错误信息: 微软JScript运行时错误:无法获取属性“Click”的值:对象为空或未定义。

为什么要执行 onclick="document.getElementById('LoginButtonInvis').Click();"?你是想执行 LoginButtonInvis 的函数还是进行页面加载? - iJade
@jade 我正在尝试强制按钮执行命令。 - Nahum
@NahumLitvin 我认为你无法模拟点击 - 你可以提交表单,你可以调用onclick事件,但是你无法像用户一样实际模拟点击。 - Aristos
@Aristos 是的,他可以。(点击第二个按钮,它会执行自己的任务,然后模拟点击第一个按钮) - Shadow The Spring Wizard
4个回答

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";

或者使用带有 "display:none;" 规则的 CSS 类。

为了避免使用行内 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",否则会导致<%=无法工作并使事情变得复杂。

Microsoft JScript 运行时错误:无法获取属性“click”的值:对象为 null 或未定义。 - Nahum
这是因为没有第一个按钮..在服务器端控件上设置visible="false"意味着根本不会发送到浏览器。我很快会更新我的答案。 - Shadow The Spring Wizard
@Nahum 如果你移除 Visible="false" 并让第一个按钮显示,它仍然无法工作吗? - Shadow The Spring Wizard
所以你做错了什么。检查HTML源代码或使用浏览器工具来检查第一个按钮的ID是什么,你看到了什么? - Shadow The Spring Wizard
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/22835/discussion-between-nahum-litvin-and-shadow-wizard。 - Nahum
显示剩余2条评论

0

尝试不同的方法

在提交按钮点击时调用JavaScript并设置隐藏变量字段

function SetValue()
{
    //set hidden field value 
    form.submit();
}

这将控制到page_load事件。在此检查hidden field的值是否设置,并执行相应的LoginButtonInvis命令。不要忘记重置隐藏字段。

希望这可以帮助到您。


0
如果它是一个链接按钮,你可以这样做:__doPostBack('ctl00$CP1$lnkBuscarEmpleado', '') 我在检查我的按钮时发现了这个。

https://istack.dev59.com/gXeg3.webp


0

我认为原始代码唯一的问题就是click方法应该全部小写:

onclick="document.getElementById('LoginButtonInvis').click();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接