【问题标题】:document.getElementById('button2').click(); not workingdocument.getElementById('button2').click();不工作
【发布时间】:2016-03-09 13:39:44
【问题描述】:

我尝试使用 javascript "document.getElementById('button2').click();" 自动触发子例程就像在下面的代码中一样。有人可以帮我看看为什么代码不起作用。谢谢

<%@ Page Language="VB" ContentType="text/html" ResponseEncoding="iso-8859-1" debug = "true"%>
<%@ Import Namespace="System.Data.SqlClient"%>
<%@ Import Namespace="System.Data"%>
<script language="vb" runat="server">
Sub sendmsg(sender As Object, e As EventArgs)
response.Redirect("index.aspx")
End Sub
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script>
function Confirm() {
    var str = $('#loutput').val(); //'We are inviting you for s special business meeting on Tueday, at No 12, Fred street. for more information please call 02341123333';

    var updateString = function(input_text) {
        //1. Find consecutive 11 numeric digits
        var match = input_text.match(/\d{11}/);
        //2. divide it into a string of 3s separated by space
        var new_str = '';
        for (var i = 1; i < match[0].length + 1; i++) {
            new_str = new_str + match[0][i - 1];
            if (i > 1 && i % 3 == 0)
                new_str = new_str + ' ';
        }
        //3. Replace old match no. with the new one
        console.log(match)
        if (match[0] != '')
            var confirm_value = document.createElement("INPUT");
        confirm_value.type = "hidden";
        confirm_value.name = "confirm_value";
        if (confirm("Message contains numeric characters which might make the message not delivered to some networks. Do you want us to reformat the message ?. This might increase the numbers of pages of the message and the cost?")) {
            confirm_value.value = "Yes";
            input_text = input_text.replace(match[0], new_str)
            $('#loutput').val(input_text);
            confirm2()

            //document.getElementById('loutput').innerHTML = input_text;

        } else {
            confirm_value.value = "No";
            confirm2()
        }
        $('#loutput').val(input_text);
        //document.getElementById('loutput').innerHTML = input_text;
    };
    updateString(str);
};

function confirm2() {
    var confirm_value = document.createElement("INPUT");
    confirm_value.type = "hidden";
    confirm_value.name = "confirm_value";
    if (confirm(" send the message now?")) {
        confirm_value.value = "Yes";
        document.getElementById('button2').click();

        //document.getElementById('loutput').innerHTML = input_text;

    } else {
        confirm_value.value = "No";
    }

    //document.getElementById('loutput').innerHTML = input_text;
};
</script>
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">   </script>
<form runat="server" action="formatmessage3.aspx" method="post">
<input type="texarea" id="loutput" name="loutput" value="<%=request.form ("loutput") %>" />
<button ID="button1" OnClick="Confirm();" runat="server">Confirm</button>
<asp:button ID="button2" OnClick="sendmsg" Text="send" runat="server" />
</form>
</body>
</html>

【问题讨论】:

  • 这看起来很糟糕的javascript。您的函数也在全局范围内,这非常糟糕。
  • @Magrangs 您的评论有点粗鲁,全局范围内的函数没有任何问题。
  • @A1rPun “全局范围内的函数没有问题” - 是的。大错特错。如果您在该页面上有一个用户控件声明了一个名为“确认”的函数,它将被覆盖,对于导入的第 3 方库也是如此。代码中充斥着不必要的 cmets,只需重构为有意义的函数,并且注释掉的代码也是不好的做法。这些功能也很难阅读和理解,所以是的,IMO 它是可怕的 JS。

标签: javascript


【解决方案1】:

这里的问题是您使用的是带有 runat="server" 的 .NET 按钮,因此它将按钮的 id 更改为不同的值。

<asp:button ID="button2" OnClick="sendmsg" Text="send" runat="server" />

你要么必须通过类来引用元素

document.getElementsByClassName("myClass")[0].click();

或引用动态名称

document.getElementById("<%= button2.ClientID %>").click();

或者在.NET4中你可以使用ClientIDMode="Static"

【讨论】:

  • 通过替换 document.getElementById('button2').click(); 引用了建议的动态名称with document.getElementById("").click();但它仍然无法正常工作
  • 那么浏览器控制台的错误信息是什么?
  • 好的,所以它找不到按钮。查看源代码,看看脚本引用了什么以及按钮的 id 实际是什么。
  • 我看过了,按钮id是button2和document.getElementById("").click();被使用
【解决方案2】:
.click()

jQuery function.
您只能在“jQueried”对象上使用它。
因此:

$('#button2').click();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多