let z = document.getElementById('id_z')
let x = document.getElementById('id_x')
let y = document.getElementById('id_y')
$("#id_a, #id_b, #id_c, #id_d, #id_e").keyup(function () {
let a = $('#id_a').val()
let b = $('#id_b').val()
let c = $('#id_c').val()
let d = $('#id_d').val()
let e = $('#id_e').val()
z.value = ((c * 3.175) / a).toFixed(0)
x.value = (b*e)+(d*(e - 1))+15
// y variable throws the error
y.value = ((c*3.175) - (a * z))/z
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label>Value A:</label>
<input type = "number" class = "numberinput form-control" required = "" id = "id_a">
<label>Value B:</label>
<input type = "number" class = "numberinput form-control" required = "" id = "id_b">
<label>Value C:</label>
<input type = "number" class = "numberinput form-control" required = "" id = "id_c">
<label>Value D:</label>
<input type = "number" class = "numberinput form-control" required = "" id = "id_d">
<label>Value E:</label>
<input type = "number" class = "numberinput form-control" required = "" id = "id_e">
<div>
<label>Value Z:</label>
<input type = "number" class = "numberinput form-control" required = "" id = "id_z">
<label>Value x:</label>
<input type = "number" class = "numberinput form-control" required = "" id = "id_x">
<label>Value Y:</label>
<input type = "number" class = "numberinput form-control" required = "" id = "id_y">
</div>
Я создаю процесс расчета с использованием JavaScript на основе того, что пользователь вводит, и получаю результат. Когда я пытаюсь ввести число в «шестерню», в консоли отображается ошибка «Указанное значение не может быть проанализировано или находится вне допустимого диапазона».
const z = document.getElementById('id_z')
const x = document.getElementById('id_x')
const y = document.getElementById('id_y')
$("#id_c, #id_d, #id_e, #id_a, #id_b").keyup(function () {
const a = $('#id_a').val()
const b = $('#id_b').val()
const c = $('#id_c').val()
const d = $('#id_d').val()
const e = $('#id_e').val()
z.value = ((c * 3.175) / a).toFixed(0)
x.value = (a*e)+(d*(e - 1)+15)
// y variable throws the error
y = ((c*3.175) - (a * z))/z
console.info(y)
console.info(typeof(y))
});
Для z и x все выглядит нормально, но результат вычисления для X всегда выдает NaN. Мне нужен совет по этой проблеме, спасибо.
Ваш код должен быть ошибочным, вы создали const y, а затем попытались переназначить его другому типу???? 😔 Попробуйте создать [runnable snippets] вместо того, чтобы просто публиковать код. Это, безусловно, улучшит качество вашего вопроса и повысит вероятность того, что другие захотят помочь.
Как и просил @RuanMendes, предоставьте минимальный воспроизводимый пример в качестве исполняемого фрагмента. На этот вопрос можно было бы окончательно ответить 20 минут назад.
И многие из нас не будут помогать, потому что это требует дополнительного времени. Это также не похоже на то, что вы пытались его отладить. Или, по крайней мере, вы не сказали нам об этом.
((c*3.175) - (a * z))/z
-> ((c*3.175) - (a * z.value))/z.value
или иным образом не используйте элемент, который является z
в математических вычислениях, но его значение. Предполагая, что это вход.
Здравствуйте, я уже добавляю исполняемый фрагмент, чтобы прояснить мой вопрос.
Как отмечалось выше, каково значение z в ..(a * z))/z? z = document.getElementById — z — это узел DOM, вы делите его на узел DOM? Это не номер...
А) .val() предоставляет значение в строковом формате, поэтому вам нужно преобразовать его в числа. Так что используйте parseFloat.
Б) Вместо использования константы используйте var или let, поскольку постоянное значение не может изменяться каждый раз при изменении различных входных значений.
C) Поскольку x,y,z являются элементами DOM, вы не можете использовать их напрямую в своих вычислениях. Вам нужно изменить свой код, как показано ниже.
Рабочий фрагмент:
var z = document.getElementById('id_z')
var x = document.getElementById('id_x')
var y = document.getElementById('id_y')
$("#id_c, #id_d, #id_e, #id_a, #id_b").keyup(function() {
var a = parseFloat($('#id_a').val()) || 0;
var b = parseFloat($('#id_b').val()) || 0;
var c = parseFloat($('#id_c').val()) || 0;
var d = parseFloat($('#id_d').val()) || 0;
var e = parseFloat($('#id_e').val()) || 0;
var first = ((c * 3.175) / a).toFixed(0);
var second = (a * e) + (d * (e - 1) + 15);
var third = ((c * 3.175) - (a * first)) / first;
z.value = first;
x.value = second;
y.value = !isNaN(third) ? third : 0;
});
input[type = "text"]
{
width:90%;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<br>
id_a<input type = "text" id = "id_a">
<br> id_b
<input type = "text" id = "id_b">
<br> id_c
<input type = "text" id = "id_c">
<br> id_d
<input type = "text" id = "id_d">
<br> id_e
<input type = "text" id = "id_e">
<br> id_x
<input type = "text" id = "id_x">
<br> id_y
<input type = "text" id = "id_y">
<br> id_z
<input type = "text" id = "id_z">
<br>
Просто сделайте parseFloat() в javascript, чтобы предотвратить это. Ниже приведен код вашей проблемы:
let a = parseFloat($('#id_a').val());
let b = parseFloat($('#id_b').val());
let c = parseFloat($('#id_c').val());
let d = parseFloat($('#id_d').val());
let e = parseFloat($('#id_e').val());
Надеюсь, эта работа для вас.
ОП актуальная проблема 123 / document.getElementById('id_z')
.val()
дает вам строковые значения, а не числа. Вы еще не можете выполнять с ними арифметические операции, сначала превратите их в числа (используя parseFloat, а не parseInt). Тот факт, чтоz
иx
работают, по сути, случайность.