【问题标题】:Perform a calculation with form data and parse them back to the form使用表单数据执行计算并将它们解析回表单
【发布时间】:2013-10-08 21:19:02
【问题描述】:

我是个 JavaScript 菜鸟,但我有一个很好的问题要解决。

我有一个从数据库接收数据的表单。

我编写了一个非常简单的 javascript,它自己执行我希望它执行的计算。 但是我怎样才能将计算出的值返回到表单中。我想使用 onkeyup 以便在发送表单之前更新数据。

此时我只有表单和单独的 javascript。但我不知道如何让它们一起工作。我知道 javascript 中的 document.write 语句在表单中不起作用。这个,我只是用来构建和检查我的计算器。

只要填入impru_rest 值,就必须开始计算。它必须将 impru_dobanda 和/或 impru_sold 的新值发送回表单。

有什么想法吗?

这是表单的一部分

<?php 
    // create form according to existing loan/interest
    echo '<td><div align="center"><input type="text" size="11" name="impru_acc" value = '.$impru_acc.'></div></td>';
    echo '<td><div align="center"><input type="text" size="11" name="impru_rest" onkeyup= value = ""></div></td>';
    echo '<td><div align="center"><input type="text" size="11" name="impru_sold" value = '.$impru_sold.'></div></td>';
    echo '<td><div align="center"><input type="text" size="11" name="impru_dobanda" value = '.$impru_dobanda.'></div></td>';    
>?

这是计算

<script type=\"text/javascript\">

var impru_acc = ".$impru_acc.";
var impru_dobanda = ".$impru_dobanda.";
var impru_rest = ".$impru_rest.";
var impru_sold = ".$impru_sold.";

if (impru_dobanda>0) {
    var difference = impru_dobanda-impru_rest;
    } else {
        var difference = 0;
        }

if (difference > 0) {
    impru_dobanda = impru_dobanda - impru_rest;
    document.write(impru_sold);
    document.write(impru_dobanda); 
    }

if (difference < 0) {
    impru_sold = difference + impru_sold;
    impru_dobanda = 0;
    document.write(impru_sold);
    document.write(impru_dobanda);
    }

if (difference == 0) {
    impru_dobanda = 0;
    var impru_sold=impru_sold-impru_rest;
    document.write(impru_sold);
    document.write(impru_dobanda);
}
</script>

在 Allen123 和 tinyByte 的帮助下,我得到了这个,但它什么也没做:

我现在在标题中添加了 jquery 注释。

我可能在函数中犯了错误,但现在似乎什么都没有发生。我猜脚本不能影响表单中的值 这就是我所拥有的。我做错了什么?

<?php
            // create form according to existing loan/interetest
            echo '<td><div align="center"><input type="text" size="11" name="impru_acc" value = '.$impru_acc.'></div></td>';
            echo '<td><div align="center"><input type="text" size="11" name="impru_rest" onkeyup=calculateAll(); value = ""></div></td>';
            echo '<td><div align="center"><input type="text" size="11" name="impru_sold" value = '.$impru_sold.'></div></td>';
            echo '<td><div align="center"><input type="text" size="11" name="impru_dobanda" value = '.$impru_dobanda.'></div></td>';    
    ?>      
            <script>
        function calculateAll(){ 
        var impru_acc = $('input[name="impru_acc"]').val();
        var impru_dobanda = $('input[name="impru_dobanda"]').val();
        var impru_rest = $('input[name="impru_rest"]').val();
        var impru_sold = $('input[name="impru_sold"]').val();

        if (impru_dobanda>0) {
            var difference = impru_dobanda-impru_rest;
            } else {
                var difference = 0;
                }
            if (difference > 0) {
                impru_dobanda = impru_dobanda - impru_rest;
                }
            if (difference < 0) {
                impru_sold = difference + impru_sold;
                impru_dobanda = 0;
                }
            if (difference == 0) {
                impru_dobanda = 0;
                var impru_sold=impru_sold-impru_rest;
            }
        }
    $(document).ready(function(){
       $('input').change(function(){
          calculateAll();
       });
    });

【问题讨论】:

  • 你为什么不在php中进行计算?什么触发了计算? (PS 我怀疑你需要 jquery)
  • 嗨艾伦。我还没有找到这样做的方法。你有什么建议吗?通过填写 impru_rest 字段触发计算。基本上这是关于贷款、利息和付款。我必须先通过付款使利率回到零。剩下的将被拿走萨尔多。从那时起,萨尔多将继续下降,直到所有付款完成。我还没有找到在 PHP 中主动更新表单字段的方法。
  • 嗨,迈克,我不确定您要做什么,如果在用户更改某些内容后需要进行计算,那么您必须使用 Javascript。如果不是这种情况,那么 php 会更好。
  • 迈克现在更容易理解了
  • 你写的这个函数的输出是什么?你想从中获得什么? (因为你的新函数没有输出!)

标签: javascript php jquery mysql forms


【解决方案1】:

将你的计算写在一个函数中,并在 focus out 或 change 时触发它,如下所示:

$('input').change(function(){
   calculateAll();
});

更新: 设置 1:在您的标题中包含一个缩小的 jquery,例如:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

然后在脚本 tag() 中使用上面的代码。最好把它放在 html 标记的末尾。

别忘了把所有的jQuery代码放进去:

<script>
function calculateAll(){
   //implement your logic here 
   var value1 = $('input[name="somename"]').val();
    .
    .
    .
}
$(document).ready(function(){
   $('input').change(function(){
      calculateAll();
   });
});
</script>

【讨论】:

  • 这假定使用 Jquery。你应该这么说
  • 嗨 tinyByte。你能为我详细说明一下吗?正如承认的那样。我是 javascript 的初学者...谢谢!
  • 这绝对是 OP 需要 IMO 的地方。 +1
  • @tinyByte。不应该使用 .val() 在这里设置例如 $('input[name="somename"]').val(his_value_here);
  • val() 获取值,val('adam smith') 将值设置为“adam smith”
【解决方案2】:
    <script type=\"text/javascript\">

    $('input').blur(function()
    {
          doCalculations();
    });


   function doCalculations()
   {

        var impru_acc = ".$impru_acc.";
        var impru_dobanda = ".$impru_dobanda.";
        var impru_rest = ".$impru_rest.";
        var impru_sold = ".$impru_sold.";

        if (impru_dobanda>0) {
            var difference = impru_dobanda-impru_rest;
            } else {
                var difference = 0;
                }

        if (difference > 0) {
            impru_dobanda = impru_dobanda - impru_rest;
            document.write(impru_sold);
            document.write(impru_dobanda); 
            }

        if (difference < 0) {
            impru_sold = difference + impru_sold;
            impru_dobanda = 0;
            document.write(impru_sold);
            document.write(impru_dobanda);
            }

        if (difference == 0) {
            impru_dobanda = 0;
            var impru_sold=impru_sold-impru_rest;
            document.write(impru_sold);
            document.write(impru_dobanda);
        }
      }   

    </script>

希望对你有所帮助...

【讨论】:

    【解决方案3】:

    所有,我找到了一个不错的工作方式。 在发布我的问题和这个答案之间的时间里,我开始学习 javascripting。还不算太远,但它给了我一些灵感。

    表单现在包含此代码,并从数据库中获取其值:

    echo '<input type="text" size="11" name="impru_acc" id="impru_acc" value = '.$impru_acc.'>';
    echo '<input type="text" size="11" name="impru_rest" id="impru_rest" onchange="calculateAll(this.value)" value = "">';
    echo '<input type="text" size="11" name="impru_sold" id="impru_sold" value = '.$impru_sold.'>';
    echo '<input type="text" size="11" name="impru_dobanda" id="impru_dobanda"  value = '.$impru_dobanda.'>';   
    

    我创建了一个单独的 calculateAll.js 文件并在我的 header.html 文件中调用它。

    calculateAll.js 基于我在问题中的脚本,但现在已完成,包括将值解析回表单。代码包括:

    function calculateAll(){ 
    var form = document.forms["fisa"];
    var impruDobandaValue = form.elements["impru_dobanda"];
    var impruRestValue = form.elements["impru_rest"];
    var impruSoldValue = form.elements["impru_sold"];
    
    var impruDobanda = parseInt(impruDobandaValue.value);
    var impruRest = parseInt(impruRestValue.value);
    var impruSold = parseInt(impruSoldValue.value);
    
    if (impruDobanda > 0) {
        var difference = impruDobanda - impruRest;
        } else {
            var difference = 0;
            }
        if (difference > 0) {
            impruDobanda = impruDobanda - impruRest;
            return theForm.elements["impru_dobanda"].value = impruDobanda;
            } else if (difference < 0) {
            impruSold = difference + impruSold;
            impruDobanda = 0;
            return form.elements["impru_dobanda"].value = impruDobanda, 
                form.elements["impru_sold"].value = impruSold;
    
            } else if (difference == 0) {
            impruDobanda = 0;
            var impruSold = impruSold - impruRest;
            return form.elements["impru_dobanda"].value = impruDobanda, 
                form.elements["impru_sold"].value = impruSold;
            }
    
        }
    

    但我遇到了一个小问题。当你犯错时,表格没有使用它的原始值,而是从改变的值重新计算。这是合乎逻辑的。为了解决这个问题,我为表单中的 impru_rest 字段创建了一个重置​​按钮。它重置该字段并恢复表单中 impru_sold 和 impru_dobanda 值的原始值。之后可以进行更正。我认为最好用 PHP 编写代码

    <?php echo "<input type=\"button\" value=\"Reset\" onclick=\"var reset = this.form.elements['impru_rest']; reset.value = reset.defaultValue; this.form.impru_dobanda.value=".$impru_dobanda."; this.form.impru_sold.value=".$impru_sold.";\">"
    ?>
    

    总之,我花了一点时间,但我想与您分享我的发现。

    所有回复的人,感谢您的帮助!

    迈克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 2012-07-19
      • 1970-01-01
      相关资源
      最近更新 更多