1

目标:这块 js,旨在获取输入到表单中的字段的值,将它们分配给变量,然后执行计算,输出到该页面上的字段中。

有一个简短的函数表示如果任何变量未定义或为空,则将输出设置为未知。

我的代码:

function calculate() {
    var $u5pop = $('input[name=sv_21d]').val();
    var $sam = $('input[name=sv_25d]').val();
    var $incidence = $('input[name=sv_313]').val();
    var $treated = $('input[name=sv_312]').val();


    if ($u5pop == undefined ||$u5pop == '') {
        $u5pop = 0;
    }
    else {
        $u5pop = parseFloat($u5pop);
    }

    if ($sam == undefined ||$sam == '') {
        $sam = 0;
    }
    else {
        $sam = parseFloat($sam);
    }

    if ($incidence == undefined || $incidence == '') {
        $incidence = 0;
    }
    else {
        $incidence = parseFloat($incidence);
    }
    //
    if ($treated == undefined || $treated == '') {
        $treated = 0;
    }
    else {
        $treated = parseFloat($treated);
    }

    var $determined = $u5pop / $incidence * $treated * $sam;

    if ($determined == undefined || $determined == '') {
        $determinedOut = 'Unknown';
    }
    else {
        $determinedOut = parseFloat($determined);
    }

    $('#calculation').attr('value', $determinedOut.toFixed(2));
}

输出字段 div #calculation 是:

<input size="18" class="calculation" id="calculation" value="Click to calculate" onfocus="calculate()"/>

这样当用户在该字段内单击时,它会执行计算。

我认为这是一个结构/语法问题,但对我来说一切都很好。任何有经验的人都能看到我在这里出错的地方吗?目前:没有任何反应(默认值保持不变)。

非常感谢!

编辑:只要填写了所有字段,它就可以完美地工作,但是如果字段为空并且该函数由 onfocus 调用,它将无法输出“未知”

4

2 回答 2

3

看到这个jsFiddle。代码最初无法更改输入值,直到我将 JS 函数移到 HTML 上方。也许这是你的问题!?

于 2012-10-07T18:04:47.027 回答
0

在其他答案中查看 jsFiddle。如果$u5popOR $samOR$treated更改为 0 则没有结果

如果$incidence更改为 0,则答案是无穷大。(除以零)

默认值应该是 = 1 NOT = 0

if ($u5pop == undefined ||$u5pop == '') {
    $u5pop = 1;
}
else {
    $u5pop = parseFloat($u5pop);
}

if ($sam == undefined ||$sam == '') {
    $sam = 1;
}
else {
    $sam = parseFloat($sam);
}

if ($incidence == undefined || $incidence == '') {
    $incidence = 1;
}
else {
    $incidence = parseFloat($incidence);
}
//
if ($treated == undefined || $treated == '') {
    $treated = 1;
}
于 2012-10-07T18:22:06.073 回答