从一系列输入字段中获取最大值

时间:2013-01-14 08:21:22

标签: javascript jquery max

我有一系列输入字段。我不知道有多少,所以我需要从课堂上获得价值。在这种情况下,课程为.total

bestresult是一个文本字段,可以从mysql获取值,但我希望手动更改,或者使用其他文本字段中的最高值。

这是代码。显然不起作用,但也许你会明白我想做什么。

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
$('input.total').change(function()
{
    var max = $('.total').max();
    $('#bestresult').attr("value", max);
});
</script>
<body>
<form>
<input type="text" name="bestresult" id="bestresult" class="total" value=""><br>
<input type="text" name="resultat[100][total]" class="total" value=""><br>
<input type="text" name="resultat[121][total]" class="total" value=""><br>
<input type="text" name="resultat[130][total]" class="total" value="">
</form>
</body>
</html>

2 个答案:

答案 0 :(得分:3)

解决方案非常简单。试试这个:

$('input.total').change(function()
{
     var max = 0;

     $('.total').each(function(){
          if(parseFloat($(this).val()) > max ) {
               max = parseFloat($(this).val());
          }
     });

     $('#bestresult').val(max);
});

但是如果您有多个文本框,则应该跟踪最大值并在每次触发更改事件时更新以获得更好的性能。

    var max = 0;

    // get the max for the first time
    $(document).ready(function () {
        $('.total').each(function () {
            if (parseFloat($(this).val()) > max) {
                max = parseFloat($(this).val());
            }
        });

        $('#bestresult').val(max);
    });

    $('input.total').change(function () {
        if (parseFloat($(this).val()) > max) {
            max = parseFloat($(this).val());
        }

        $('#bestresult').val(max);
    });

答案 1 :(得分:2)

首先,您应该在身体的末尾放置脚本,以便在绑定更改事件时定义元素。

然后,您最好过滤输入,以排除包含最大值的输入。您可以使用此选择器:input.total[id!=bestresult]

最好还绑定keyup事件,以便更新max,而无需用户点击外部。

因此,您可以拥有以下代码:

$('input.total[id!=bestresult]').on('blur change keyup', function(){
    $('#bestresult').attr("value", Math.max.apply(null, $('.total[id!=bestresult]').map(function(){
        return parseFloat(this.value)}).slice().filter(function(i, v){return v==v})
    ));
});

Demonstration