Можно ли получить минимальное и максимальное значение с помощью jQuery и отобразить его в другом поле ввода? - PullRequest
1 голос
/ 13 июля 2010

и мы идем:

Я пишу (на самом деле это больше похоже на попытку и запрос) скрипта GreaseMonkey с использованием JS и включая (также используя) библиотеку jQuery.

Я создал другую таблицу с некоторыми полями ввода.Пример (только для ввода-полей):

<code>
  + "   < 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=\"\" > "</p>

<p>//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\" > " 

Моя цель состояла в том, чтобы получить значения полей min, max и avg и отобразить результат в другом поле ввода.

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

Это не сработает, потому что в библиотеке jQuery нет ни min (), ни max (), как у JS.

Так что япопробовал что-нибудькак

<code>
<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.

<code>function calculateAvg() {</p>

<p>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];</p>

<p>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);</p>

<p>function calculateMax() {</p>

<p>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];</p>

<p>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;</p>

<p>}</p>

<p>$("'field_8").blur  (calculateMax);</p>

<p>

Итак, спасибо за вашу помощь.Мне действительно это нужно.Файли

Ответы [ 4 ]

6 голосов
/ 13 июля 2010

Использование других библиотек - один из способов сделать это, но решение небольших проблем вручную [ с использованием необработанного 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 голос
/ 13 июля 2010

Возможно, вы захотите взглянуть на Плагин jQuery Calculation . Синтаксис для вашего примера будет выглядеть примерно так:

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
1 голос
/ 13 июля 2010

Попробуйте это:

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

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

И затем вы можете добавить это минимальное значение в другое поле ввода, например:

$('#some-input').val(min);
0 голосов
/ 13 июля 2010

Без плагинов вы можете сделать что-то вроде 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());

Прототипы должны помочь в будущем.

...