【问题标题】:Calculate total of input text fields on a datatable in jsf计算jsf中数据表上输入文本字段的总数
【发布时间】:2013-01-04 12:27:26
【问题描述】:

我有一个包含两列的 JSF <h:datatable>

  • 第 1 列:<h:outputText>,从 bean 数据中填充。
  • 第 2 栏:<h:inputText> 框。

表外有一个“总计”字段,我想让它实时显示在 column2 中输入的字段总数。所以我四处寻找,发现我需要一个 JavaScript 来做到这一点。然而,我对 JS 还是很陌生。

我感到困惑的是如何访问输入文本框的值。到目前为止我做了什么:

function totalFrom() {
    var element = document.getElementById('transferFundsForm:fundsFromTable:0:from_transferAmt');
    if(element != null){
        document.forms['transferFundsForm']['transferFundsForm:totalFrom'].value = document.forms['transferFundsForm']['transferFundsForm:totalFrom'].value+ element;
    }
}

据我了解,transferFundsForm:fundsFromTable:0,这里的0 代表第一行。如何引用正在编辑的列中的元素?

我已经在列中文本框的onblur 事件上调用了这个函数。

我还读到我也可以使用 <f:ajax>,但我使用的是 JSP 而不是 Facelets,所以我不能使用 <f:ajax>

【问题讨论】:

    标签: javascript html jsf-2


    【解决方案1】:

    <table> 元素的 HTML DOM 元素表示有一个 rows property,它为您提供了一个包含所有 <tr> 元素的数组。这个<tr> 元素的HTML DOM 表示有一个cells property,它为您提供了一个包含所有<td> 元素的数组。

    所以,假设表格的第二列仅包含一个 <input> 元素,它包含您想要总结的值,并且 totalFrom 是一个 <input> 元素(至少,您是尝试设置value 属性而不是innerHTML),您可以按如下方式实现:

    function totalFrom() {
        var table = document.getElementById('transferFundsForm:fundsFromTable');
        var total = 0;
    
        for (var i = 0; i < table.rows.length; i++) {
            var secondColumn = table.rows[i].cells[1];
            var input = secondColumn.getElementsByTagName('input')[0];
            var value = parseInt(input.value);
    
            if (!isNaN(value)) {
                total += value;
            }
        }
    
        document.getElementById('transferFundsForm:totalFrom').value = total;
    }
    

    如果totalFrom&lt;h:outputText id="totalFrom"&gt;,则改为如下设置:

        document.getElementById('transferFundsForm:totalFrom').innerHTML = total;
    

    【讨论】:

    • 谢谢 :) ,顺便说一句,我有一个与此相关的问题。此函数在 onblur 事件上被正确调用。但是当我在onchange 上调用它时,什么也没有发生。有什么理由吗?还是我做错了?
    • 在离开字段之前更改值。
    【解决方案2】:

    为什么不使用 jsf 服务器端事件或用户 http://livedemo.exadel.com/richfaces-demo/ 它还为您提供内置的 ajax 功能

    【讨论】:

    • 服务器端?你确定?如果它可以在客户端使用 JavaScript 完成,为什么要选择服务器端并不必要地增加流量?
    • @Mukul 为什么要有服务器?在 80 年代和 90 年代初期,我们在没有他们的情况下做得很好。
    • @MikeBraun:我想你明白我的意思.. 仍然只是一个仅供参考,它是 2013 年而不是 80 年代/90 年代
    • @Mukul 但我们不能再次在客户端上做所有事情吗?你不是说用服务器就是00后吗?确实,现在是 2013 年,客户端回归,服务器离开?
    • @MikeBraun 我的意思是,这是客户端的东西。当在 UI(客户端)上输入数据时,我需要更新 UI(客户端)上的计数器。在 UI(客户端)上轻松、整洁、快速和合乎逻辑地完成,然后最好在客户端完成,并为我们节省不必要的往返服务器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2022-07-31
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多