【问题标题】:access javascript variable value in jsp在jsp中访问javascript变量值
【发布时间】:2014-01-11 21:56:48
【问题描述】:

我想将一个 javascript 变量传递给我需要使用它的 servlet。

在 javascript 中,变量 count 返回我的表的行,我可以在 jsp 中显示 count,使用 $('#counter').html(count); ,但我不能通过 count 对我的 servlet 的值。我试过document.getElementById("hiddenField").value=count;,但它不起作用。

Javascript

<script>
    var count = 3;
    $(function() {
        $('#counter').html(count);
        $('#addButton').bind('click', function() {
             count = document.getElementById("dataTable").getElementsByTagName("tr").length;
            $('#counter').html(count);
        });
        $('#deleteButton').bind('click', function() {
            count = document.getElementById("dataTable").getElementsByTagName("tr").length;
            $('#counter').html(count);
        });
    });
    document.getElementById("hiddenField").value=count; // ???
</script>

JSP

Count: <span id="counter"></span> <%-- it works --%>

<form method="post" action="newteamsubmit"> 
...
<input type="hidden" id="hiddenField" name ="countRows" />
<input type="submit" name ="button1" value=" Submit " />
<input type="submit" name = "button1" value=" Cancel " />
</form>

Servlet

String cr = request.getParameter("countRows"); //I' ve tried also to convert it 
// to int, but that's not my problem, since I cannot pass the value as a start

我花了很多时间,试图弄清楚如何在 jsp 中访问 javascript 变量,但我还没有找到任何解决方案。 提前致谢。

【问题讨论】:

  • 您是如何提交表单的?

标签: java javascript jsp servlets netbeans


【解决方案1】:

每次单击添加按钮或删除按钮时都会计算count。但是您只在页面加载时设置隐藏字段值一次(因此其值被硬编码为 3)。

您必须在点击处理程序中设置它,就像为 #counter 元素所做的那样:

$('#addButton').bind('click', function() {
    count = document.getElementById("dataTable").getElementsByTagName("tr").length;
    $('#counter').html(count);
    $('#hiddenField').val(count);
});
$('#deleteButton').bind('click', function() {
    count = document.getElementById("dataTable").getElementsByTagName("tr").length;
    $('#counter').html(count);
    $('#hiddenField').val(count);
});

另请注意,您在此处的两个点击处理程序中重复完全相同的代码。对于两个按钮,您应该只执行一次:

$('#addButton, #deleteButton').bind('click', function() {
    count = document.getElementById("dataTable").getElementsByTagName("tr").length;
    $('#counter').html(count);
    $('#hiddenField').val(count);
});

甚至,因为您使用的是 jQuery:

$('#addButton, #deleteButton').bind('click', function() {
    count = $("#dataTable tr").length;
    $('#counter').html(count);
    $('#hiddenField').val(count);
});

【讨论】:

    【解决方案2】:

    document.getElementById('hiddenField').value 未设置,因为它在您的 document.ready 之外。将它放在您的点击处理程序中。

    【讨论】:

      【解决方案3】:

      确保两件事 -

      1. 您的页面上只有一个 ID 为“hiddenField”的元素。
      2. 确保以下代码

      document.getElementById("hiddenField").value=count;

      在页面之后。

      只要确保 js 在元素加载后设置 hiddenField 即可。 3. 使用 Javascript 控制台检查任何 JS 错误。

      好好休息吧

      【讨论】:

        【解决方案4】:

        这里的主要问题是您试图从服务器访问,这是一个仅存在于客户端的变量。要访问该变量,您必须使用 AJAX 将其从客户端发送到服务器,以在后端触发某种形式的 API。 REST、SOAP 或 XML-RPC 是用于此类事情的常用技术。服务器端代码用于生成 UI 并向其提供来自数据库等的数据。通常 UI 只生成一次,然后客户端调用服务器请求更多数据以响应用户操作,例如单击按钮。

        想象一个包含书籍信息的表格:标题、作者、出版日期等。这个表格可能会变得非常大,并且传统上这个表格会被分成几个页面,并且可能是一个动态过滤器。为了节省带宽并通过不从头开始加载整个页面来增加用户体验,您可以使用 AJAX 仅向服务器询问相关数据。这样做页面会为用户动态而流畅地更新。

        在您的情况下,您可以使用此技术在用户每次单击按钮时更新服务器。

        但是,如果您真的只是想在用户执行操作时使用值更新表单中的隐藏字段,并且服务器不会对其执行任何操作,除非显示它,您可以使用 javascript。

        还请记住,请求变量包含您在提交表单时发布到服务器的数据。 servlet 将在客户端发布后获取数据,也就是在 JSP 生成页面之后。代码执行的顺序是 JSP -> Javascript -> Servlet。

        希望这会有所帮助!

        【讨论】:

          【解决方案5】:

          你可以这样使用:

          document.forms[0].countRows.value = counter
          

          希望对你有帮助

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-07-07
            • 2021-08-23
            • 2012-10-03
            相关资源
            最近更新 更多