是否可以使用jQuery获取最小值和最大值并将其呈现在另一个输入字段中?

时间:2010-07-13 09:17:00

标签: javascript jquery greasemonkey

然后我们去:

我正在编写(实际上感觉更像是尝试和询问)使用JS的GreaseMonkey脚本并包含(也使用)jQuery库。

我用一些输入字段创建了另一个表。实施例(输入字段只):


  + "   < input type=\" text\"  id=\" field_1\"  name=\" min_field_1\" value=\"\" > " 
  + "   < input type=\" text\"  id=\" field_2\"  name=\" min_field_2\" value=\"\" > " 
  + "   < input type=\" text\"  id=\" field_3\"  name=\" min_field_3\" value=\"\" > " 
  + "   < input type=\" text\"  id=\" field_4\"  name=\" min_field_4\" value=\"\" > "

//the results should be rendered in another input-field in this case with id=field_result_min + " < input type=\" text\" id=\" field_result_min\" name=\"min_field_result\" > " + " < input type=\" text\" id=\" field_result_max\" name=\"max_field_result\" > " + " < input type=\" text\" id=\" field_result_avg\" name=\"avg_field_result\" > "

我的目标是获取字段的最小值,最大值和平均值,并将结果呈现在另一个输入字段中。

//returns the min value of all input-fields starting with a name attribute of min
$("input[name^='min']")min.()

这不起作用,因为jQuery库没有像JS那样的任何min()或max()。

所以我试过了......喜欢


<input type="button" value="=" onclick="window.document.getElementById('field_result_min') = Math.min(window.document.getElementById('field_1').value,window.document.getElementById('field_2').value,window.document.getElementById('field_3').value,window.document.getElementById('field_4').value)" > 

嗯...我再次陷入困境和困惑 - 即使在我解释的时候。

问题:如何在一个输入字段中渲染某些输入字段的最小值和最大值?

非常感谢任何帮助。 Faili

更新 这就是我解决它的方式。好吧,它只是平均值和最大值(最小值是可推导的)。任何更改或错误都应来自复制和粘贴以及更改某些内容。在stackoverflow的代码中。

function calculateAvg() {

var fields = [1*window.document.getElementById('field_1').value,1*window.document.getElementById('field2').value,1*window.document.getElementById('field').value,1*window.document.getElementById('field4').value,1*window.document.getElementById('field5').value,1*window.document.getElementById('field6').value];

var total = 0; var anzahl = 0; for(i=0;i 0) { total = total+fields[i]; anzahl=anzahl+1;} } var durchschnitt = (total/anzahl); window.document.getElementById('fieldavg').value = durchschnitt; } $("#fieldavg").blur (calculateAvg);

function calculateMax() {

var fields = [1*window.document.getElementById('field_1').value,1*window.document.getElementById('field2').value,1*window.document.getElementById('field').value,1*window.document.getElementById('field4').value,1*window.document.getElementById('field5').value,1*window.document.getElementById('field6').value];

var max = 0; for(i=0; i<fields.length;i++) { if(fields[i] > 0) { if(max<fields[i]){ max=fields[i]; } } } window.document.getElementById('field8').value = max;

}

$("'field_8").blur (calculateMax);

所以,谢谢你的帮助。我真的需要它。 Faili

4 个答案:

答案 0 :(得分:5)

使用其他库是一种方法,但手动解决小问题[使用原始javascript ]会更好。 更改下面代码中的选择器,然后检查。

$(function(){
    sel = $('.field')
    min_field = $('#min');
    max_field = $('#max');
    avg_field = $('#avg');
    len = $(sel).length;
    $(sel).change(function(){
       sum = 0
       list = []
       $(sel).each(function(){
            val = Number($(this).val());
            list.push(val);
            sum += val;
        })
        $(min_field).val(Math.min.apply(Math, list))
        $(max_field).val(Math.max.apply(Math, list))
        $(avg_field).val(sum/len);
     })
})

快乐编码。

答案 1 :(得分:1)

试试这个:

var values = $("input[name^='min']").map(function(){
    return isNaN(this.value) ? [] : +this.value;
}).get();

var min = Math.min.apply(null, values);

然后你可以将min-value添加到另一个输入字段,如下所示:

$('#some-input').val(min);

答案 2 :(得分:1)

您可能想查看jQuery Calculation Plug-in。您的示例的语法将是这样的:

var MinVal=$("input[name^='min_field_']").min(); // Get minimum value
var MaxVal=$("input[name^='min_field_']").max(); // Get maximum value
var AvgVal=$("input[name^='min_field_']").avg(); // Get average value

这将是更快的版本:

var MinField=$("input[name^='min_field_']");

var MinVal=MinField.min(); // Get minimum value
var MaxVal=MinField.max(); // Get maximum value
var AvgVal=MinField.avg(); // Get average value

答案 3 :(得分:0)

如果没有插件,您可以执行this JSFiddle

之类的操作
Array.prototype.avg = function() {
    var total = this[0];
    var len = this.length;
    for (var i = 1; i != len; i++) total += this[i];
    return total / len;
}

Array.prototype.min = function() {
    return Math.min.apply( Math, this );
}

Array.prototype.max = function() {
    return Math.max.apply( Math, this );
}

var values = $("input[id^='field_']").map(function(){
    var value = $(this).val();
    if (value.length == 0 || isNaN(value)) {
        return 0;
    } else {
        return parseFloat(value);
    }
}).get();

$('#max').val(values.max());
$('#min').val(values.min());
$('#avg').val(values.avg());

原型应该在将来有所帮助。