Подтвердить что ты не робот

Значение текстового поля на основе значения другого текстового поля

У меня проблема, когда я пытаюсь создать систему, в которой люди могут видеть данные в реальном времени, например, если я поставлю 500 граммов молока, тогда люди смогут увидеть ценное содержание жира, сладостей, твердых в нем, и для этого я есть тестовая коробка с весом молока и текстовыми полями для чтения только для других вещей, таких как жир, сладкий, твердый материал и т.д.

теперь я хочу обновить значение жира, сладких, твердых веществ при смене веса молока

Я добился этого в некоторой степени, но проблема заключается в том, что ценность продолжает увеличиваться даже при снижении стоимости молока.

Я добавляю код здесь, пожалуйста, проверьте, и любая помощь/предложения глубоко оценены.

HTML

   <td><input type="text" name="name" placeholder="Weight" class='smalltextbo onlynumbers' id="w<?=$thedetails_array['sno']?>" onkeyup="return updatevalues(this);" onkeypress="return isNumber(event);"; value='1'/></td>
                      <td><input type="text" name='fat' value="<?=$thedetails_array['fat']?>" id="fat<?=$thedetails_array['sno']?>" readonly></td>
                      <td><input type="text" name='sweet' value="<?=$thedetails_array['sweet']?>" id="sweet<?=$thedetails_array['sno']?>" readonly></td>
                      <td><input type="text" name='solid1' value="<?=$thedetails_array['solid1']?>" id="solid<?=$thedetails_array['sno']?>" readonly></td>

JAVASCRIPT

function updatevalues(vale){
            var mainid=$(vale).attr("id");
            var onlyidis=mainid.substr(1);
            var mainval=$('#w'+onlyidis).val();

            var varfatval=$('#fat'+onlyidis).val();
            $('#fat'+onlyidis).val(varfatval*mainval);

            var varfatval=$('#sweet'+onlyidis).val();
            $('#sweet'+onlyidis).val(varfatval*mainval);


}

У меня есть данные настоящих твердых веществ, жира и сладкого в 1 грамм молока, а затем обновляйте его настоящим весом молока здесь...

вот изображение

введите описание изображения здесь

все еще не могу получить какое-либо решение, есть ли кто-нибудь, кто может мне помочь лучше?

4b9b3361

Ответ 1

Ваша ошибка в том, что значение твердых частиц будет учитывать их предыдущее значение и умножить его на значение, которое у вас есть.

Это явно неверно:

        var varfatval=$('#fat'+onlyidis).val();
        $('#fat'+onlyidis).val(varfatval*mainval);

        var varfatval=$('#sweet'+onlyidis).val();
        $('#sweet'+onlyidis).val(varfatval*mainval);

так как varfatval - это предыдущее значение, и вы умножаете на него mainval вместо того, чтобы умножать его на нужное значение. Вы должны каким-то образом инициализировать значения, которые вам понадобятся, например, так (используйте правильные значения вместо 12 и 13 соответственно):

<script type="text/javascript">
    var fat = 12;
    var sweet = 13;
</script>

а затем используйте эти значения для ваших обновлений, например:

function updatevalues(vale){
            var mainid=$(vale).attr("id");
            var onlyidis=mainid.substr(1);
            var mainval=$('#w'+onlyidis).val();

            $('#fat'+onlyidis).val(fat*mainval);

            $('#sweet'+onlyidis).val(sweet*mainval);


}

Ответ 2

Я пытаюсь создать систему, в которой люди могут видеть данные в реальном времени, например, если я поставлю 500 граммов молока, тогда люди смогут увидеть ценное содержание жира, сладостей [...] проблема заключается в том, что значение продолжает умножаться даже при уменьшении стоимости молока

Как отмечают другие, если вы хотите вычислить значение различного содержимого на основе веса ввода в реальном времени (на стороне клиента), вам нужно сохранить исходные множители в клиентском коде.

например. если мы хотим отобразить количество жира ингредиента и знаем, что этот ингредиент содержит 0,4 г жира на грамм ингредиента, коэффициент составляет 0,4. Когда изменяется фактический вес, мы должны пересчитать значение содержимого из его множителя.

В вашем коде кажется, что вы вставляете значения множителя из кода на стороне сервера, но не храните оригинальные множители отдельно для перерасчета на стороне клиента. Вы можете либо сохранить их в JavaScript-коде, например, так:

<script>
var milkMultipliers = {
  fat: 0.01,
  sweetness: 3.2
}
</script>

Или вы можете хранить множители в качестве атрибутов данных соответствующих элементов HTML, например. в соответствии с приведенным ниже демо-кодом:

function update(elm){
  var ingredient = elm.id;
  var computables = ['fat', 'protein', 'carbo'];
  for(var i = 0; i < computables.length; i++){
    var tableCell = document.getElementById(ingredient + '-' + computables[i]);
    var multiplier = tableCell.getAttribute('data-multiplier');
    tableCell.innerHTML = (+elm.value) * (+multiplier); 
  }
}

update(document.getElementById('milk'));
update(document.getElementById('butter'));
th, td{
  text-align: left;
  padding: 0.4em;
}
body, input{
  font-family: sans-serif;
}
<table>
  <tr>
    <th>Ingredient</th>
    <th>Weight</th>
    <th>Fat</th>
    <th>Protein</th>
    <th>Carbohydrates</th>
  </tr>
  <tr>
    <td>Milk</td>
    <td>
      <input id="milk" onkeyup="update(this)" value="1"/>
    </td>
    <td id="milk-fat" data-multiplier="0.01"></td>
    <td id="milk-protein" data-multiplier="0.034"></td>
    <td id="milk-carbo" data-multiplier="0.05"></td>
  </tr>
    <tr>
    <td>Butter</td>
    <td>
      <input id="butter" onkeyup="update(this)" value="1"/>
    </td>
    <td id="butter-fat" data-multiplier="0.81"></td>
    <td id="butter-protein" data-multiplier="0.009"></td>
    <td id="butter-carbo" data-multiplier="0.001"></td>
  </tr>
</table>

Ответ 3

Вы должны удалить эти данные перед обновлением этого значения.

function updatevalues(vale){
        var mainid=$(vale).attr("id");
        var onlyidis=mainid.substr(1);
        var mainval=$('#w'+onlyidis).val();

        var varfatval=$('#fat'+onlyidis).val();
        $('#fat'+onlyidis).val();
        $('#fat'+onlyidis).val(varfatval*mainval);

        var varfatval=$('#sweet'+onlyidis).val();
        $('#sweet'+onlyidis).val();
        $('#sweet'+onlyidis).val(varfatval*mainval); 
 }

Ответ 4

В этом примере значения текстовых полей fat и salt всегда точны в зависимости от значения молока. Они не сохраняют состояние, они пересчитывают каждый раз, когда изменяется значение молока.

$('#milk').on('input',function(e){
    $('#fat').val(Number($(this).val())/100);
    $('#salt').val(Number($(this).val())/200);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="milk"></input>
<span>Fat</span>
<input id="fat" disabled="true"></input>
<span>Salt</span>
<input id="salt" disabled="true"></input>

Ответ 5

вместо вычисления содержания жира, сладкого и т.д. вы просто умножаетесь на предыдущее значение в жировых, сладких коробках ввода.

// calculate amount of fat from milk amount i.e from mainval
$('#fat'+onlyidis).val(calculatedValue);

// calculate amount of sweet from milk amount i.e from mainval
$('#sweet'+onlyidis).val(calculatedValue);