代码之家  ›  专栏  ›  技术社区  ›  Cooper.Wu

如何获取由javascript更改的DIV内容?

  •  3
  • Cooper.Wu  · 技术社区  · 16 年前

    我在页面上有一个DIV,内容将由javascript更改,我想从C代码中获取它的值。但是,它总是返回空值或初始值,而不是更改的值。

    如果我从DIV改为HIDDEN,效果会很好。我不知道为什么?

    代码如下:

    
    <head runat="server">
        <title>Untitled Page</title>
        <script type="text/javascript">
            foo = function()
            {
                var d = document.getElementById('divTest');
                d.innerHTML = 'my value';
    
                var e = document.getElementById('hiddenTest');
                e.value = 'my value';
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server" >
        <div>
            <div id="divTest" runat="server"  />
            <input type="hidden" runat="server" id="hiddenTest" />
            <input type="button" value="test" onclick="javascript:foo();" />
    
            <asp:Button ID="btnTest" runat="server" Text="ASP.NET Button" OnClick="OnbtnTest" />
        </div>
        </form>
    </body>
    

    这是C代码:

    
       protected void OnbtnTest(object sender, EventArgs e)
        {
            Response.Write( string.Format("alert('{0}');", hiddenTest.Value) );
        }
    
    5 回复  |  直到 11 年前
        1
  •  2
  •   Canavar    16 年前

    表单输入元素在发布到服务器的表单元素中,所有其他内容都是静态的,而不是发布到服务器。这是HTTP的基本规则,您可以看到详细信息 from here .

    有两个选项,在准备DIV的内容时,在隐藏字段中编写相同的内容。在服务器端获取隐藏字段的值。

    或者在准备在服务器端获取内容时调用Ajax。

        2
  •  2
  •   Christian C. Salvadó    16 年前

    这是因为只有表单元素被提交回服务器端。

        3
  •  0
  •   Anthony    16 年前

    那么,实际目标是什么呢?您想在用户更改输入时跟踪上一个值,还是想将用户输入的值返回到服务器端脚本?或者您只想让用户看到刚刚输入的数据的警报?

    如果是第一个,您只需要将前一个数据移动到该函数中的数组或对象。因此,您需要添加一个onchange事件处理程序,在替换“当前值”之前,将先前存储的“当前值”移动到“旧值”数组中。

    如果要将输入值传递给服务器,则需要使用Ajax。这也将简化您的代码。它不是让C做UI工作,而是处理用户输入,决定返回值,并将其传递回javascript,然后由javascript将其输出给用户。我建议jquery使Ajax更简单,例如:

        $("input#testinput).post(
                      "myserverscript.aspx", 
                       {question : "Who Loves the Sun?"}, 
                       function(answer) {
                       alert("Answer: " + answer);
                       });
    

    但是对于您的问题,我对正确答案有点模糊,因为我不确定为什么您首先使用C位来做JavaScript可以做的事情,以及为什么您使用ASP按钮而不是纯HTML。

        4
  •  0
  •   Amin    13 年前

    在我的案例中,我最终使用了 AJAX HTMLEditor 而不是DIV标记。与DIV不同,在客户端对htmleditor所做的任何更改都将发布到服务器。

        5
  •  0
  •   GitaarLAB    11 年前

    您的javascript代码将无法看到 隐榫 占卜 控件,因为它们从服务器端运行。您的javascript将尝试查找控件的客户端ID。请尝试将函数foo()替换为:

    foo = function()
    {
       var d = document.getElementById('<%= this.divTest.ClientID %>');
       d.innerHTML = 'my value';
    
       var e = document.getElementById('<%= this.hiddenTest.ClientID %>');
       e.value = 'my value';
    }