JavaScript中的自动计算

JavaScript中的自动计算,javascript,Javascript,我有一个脚本,可以在您键入值时实时计算某些字段中的值,并且工作正常。 但是,如果我将这些值发送到db,然后从那里取回这些值,并根据db的请求填充字段,那么这些字段将不再计算,除非在已填充的字段中重新键入 知道如何在从db加载填充的表单时启动计算吗 这是Jscript <script type="text/javascript"> $(document).ready(function() { $('input[id=r],input[id=p]').change(functi

我有一个脚本,可以在您键入值时实时计算某些字段中的值,并且工作正常。 但是,如果我将这些值发送到db,然后从那里取回这些值,并根据db的请求填充字段,那么这些字段将不再计算,除非在已填充的字段中重新键入

知道如何在从db加载填充的表单时启动计算吗

这是Jscript

<script type="text/javascript">

$(document).ready(function() {
    $('input[id=r],input[id=p]').change(function(e) {
        var total = 0;
        var $row = $(this).parent();
        var rate = $row.find('input[id=r]').val();
        var pack = $row.find('input[id=p]').val();

        total = parseFloat(rate * pack);
        //update the row total
        $row.find('.amount').text(total);

        var total_amount = 0;
        $('.amount').each(function() {
            //Get the value
            var am= $(this).text();
            console.log(am);
if (typeof console == "undefined") {
    this.console = {log: function() {}};
}
            //if it's a number add it to the total
            if (IsNumeric(am)) {
                total_amount += parseFloat(am, 10);
            }
        });
        $('.total_amount').text(total_amount);
    });
});

//isNumeric function Stolen from: 
//http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric

function IsNumeric(input) {
    return (input - 0) == input && input.length > 0;
}
</script>

$(文档).ready(函数(){
$('input[id=r],input[id=p]')。更改(函数(e){
var合计=0;
var$row=$(this.parent();
var rate=$row.find('input[id=r]').val();
var pack=$row.find('input[id=p]').val();
总计=浮动(费率*包装);
//更新行总数
$row.find('.amount').text(总计);
风险价值总额=0;
$('.amount')。每个(函数(){
//获取值
var am=$(this.text();
控制台日志(am);
如果(控制台类型==“未定义”){
this.console={log:function(){};
}
//如果是一个数字,就把它加到总数上
如果(是数字(am)){
总金额+=浮动(上午10点);
}
});
$('总金额').text(总金额);
});
});
//isNumeric函数从以下位置被盗:
//http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric
函数为数字(输入){
返回值(输入-0)=input&&input.length>0;
}
这是HTML

        <tr>
            <td></td>
            <td>
            <div>
                <input name="a2c" type="text" size="10" value="<? echo "$a2c";?>">
                <input id="r" class="rate" name="a2q" type="text" maxlength="255" size="5" value="<? echo "$a2q";?>">
                <input id="p" class="pack" name="a2p" type="text" maxlength="255" size="5" value="<? echo "$a2p";?>">
                <span class="amount"></span></div>
            </td>
        </tr>
        <tr>
            <td></td>
            <td>
            <div>
                <input name="a3c" type="text" size="10" value="<? echo "$a3c";?>">
                <input id="r" class="rate" name="a3q" type="text" maxlength="255" size="5" value="<? echo "$a3q";?>">
                <input id="p" class="pack" name="a3p" type="text" maxlength="255" size="5" value="<? echo "$a3p";?>">
                <span class="amount"></span></div>
            </td>
        </tr>

将在id为“r”的输入上自动触发更改事件;这样就够了吗


将在id为“r”的输入上自动触发更改事件;这就足够了吗?

您可以做的是在脚本加载时也运行您的函数。 一种方法是从.change()中删除匿名函数,并为其命名

function yourPreviouslyAnonymousFunction() { ... }
$(document).ready(function () {
    yourPreviouslyAnonymousFunction();
    $('input[id=r],input[id=p]').change(yourPreviouslyAnonymousFunction);
});
因为在使用PHP注入值时,页面加载完成时不会调用函数。这样,当页面加载完成时,函数也会运行一次,因此使用函数计算值

另一种方法是强制事件发生,因为您已经在使用jQuery:

$(document).ready(function () {
     $('input[id=r],input[id=p]').change(function () {
         ...
         // Leave this as is
         ...
     });
     $('input[id=r],input[id=p]').change();
});

这是MassivePenguin解释的方法。

您可以做的是在加载脚本时运行您的函数。 一种方法是从.change()中删除匿名函数,并为其命名

function yourPreviouslyAnonymousFunction() { ... }
$(document).ready(function () {
    yourPreviouslyAnonymousFunction();
    $('input[id=r],input[id=p]').change(yourPreviouslyAnonymousFunction);
});
因为在使用PHP注入值时,页面加载完成时不会调用函数。这样,当页面加载完成时,函数也会运行一次,因此使用函数计算值

另一种方法是强制事件发生,因为您已经在使用jQuery:

$(document).ready(function () {
     $('input[id=r],input[id=p]').change(function () {
         ...
         // Leave this as is
         ...
     });
     $('input[id=r],input[id=p]').change();
});

这是MassivePenguin解释的方法。

将所有逻辑放在一个单独的函数中,
重新计算(){…}
。进行.change()事件调用
重新计算()
,并添加要在页面加载时执行的代码:

$(document).ready(function() {
    recalculate();
});

有一件事还不清楚,那就是如何往返到数据库。您是在使用ajax,还是在重新加载页面?上述方法适用于页面重新加载或表单提交,但如果您正在进行ajax调用,则必须挂接到post submit ajax回调中,并从那里调用recalculate()

将所有逻辑放在一个单独的函数中,
重新计算(){…}
。进行.change()事件调用
重新计算()
,并添加要在页面加载时执行的代码:

$(document).ready(function() {
    recalculate();
});

有一件事还不清楚,那就是如何往返到数据库。您是在使用ajax,还是在重新加载页面?上述方法适用于页面重新加载或表单提交,但如果您正在进行ajax调用,则必须挂接到post submit ajax回调中,并从那里调用recalculate()

您可以强制更改事件(以防止代码重复):


$(“.rate”).change()

您可以强制更改事件(以防止代码重复):

$(“.rate”).change()

谢谢,我应该把$('input#r').change()放在脚本的哪里?在定义change()函数之后,如果你从数据库中引入数据时强制刷新页面。谢谢,我应该把$('input#r').change()放在脚本的哪里?在定义change()函数之后,如果在从数据库引入数据时强制页面刷新。