#jquery
#jquery
Вопрос:
Несколько полей ввода задают значение с помощью переменной, называемой множителем. При каждом вводе я добавлял новый пользовательский атрибут с именем my_value, который вычисляется на основе выпадающего списка 3 и целевой таблицы с соответствующими значениями. Я могу правильно рассчитать каждый ввод и выполнять запись в SPAN.
Однако у меня есть две проблемы или бага, как я могу это решить? 1. Я попытался установить входное значение с помощью множителя переменной, поэтому, когда я выбираю выпадающий список, я вижу значение из соответствующей таблицы, отображаемое на входном значении, оно отображается в журнале консоли, попробовал приведенный ниже код, он не устанавливает входное значение, только для проверки одного идентификатора, это не сработало, что не так?
$('#Cherry').val(multiplier);
или использовать для всех входных данных, приведенных ниже, не работает, что не так?
$("input[type='number']") =multiplier;
Я не смог установить входные данные. пожалуйста, смотрите изображение ниже для иллюстрации.
-
Общий итог показывает «NaN», если я задаю входное значение по умолчанию и использую строку ниже, общий итог работает нормально (
<input id="Cherry" name="Cherry" class="element text medium" type="text" maxlength="255" value="40" readonly="true"/>
)результат.текст($(this).val() * множитель);
Если я удалю все значения из пользовательского атрибута input set my_value =»40″, он вычисляет каждый ввод, но общее количество показывает NaN
result.text($(this).attr("my_value") * multiplier);
<input id="Cherry" name="Cherry" class="element text medium" type="text" maxlength="255" value="" my_value ="40" readonly="true"/>
Например, или более подробное объяснение для моей справочной таблицы **
*** Большое спасибо*
function myCalculate(){
var volume = $("#Volume").val();
var productOrigin = $("#ProductOrigin").val();
var geographicalLocation = $("#GeoLocation").val();
if (volume === "" || productOrigin === "") {
// alert("Please select the product origin and volume.");
return;
}
var tableToUse = geographicalLocation === "" ? productOrigin : geographicalLocation;
$("input[type='text']").each(function(i){
// Current product ID, e.g. "Apple", "Apricot", etc.
var currentProductId = $(this).attr('id');
// Amount to multiply.
var multiplier = $(`table#${tableToUse} tbody > tr[product='${currentProductId}'] > td[volume='${volume}']`).text();
// A <span> element, to be populated with the calculated product volume.
var result = $("<span name='result'>");
// Calculate the figure and update the result element.
result.text($(this).attr("my_value") * multiplier);
// Remove any previously added <span> result elements.
$(this).next("span").remove();
// Insert result after the current input field.
$(this).after(result);
// to calculate Grand total
function getInputs(selector) {
var inputs = 0;
$(selector).each(function() {
$(this).find("input").each(function() {
sum = parseInt($(this).html());
$('#').val(parseInt($(this).html()));
var multiplier = $(`table#${tableToUse} tbody > tr[product='${currentProductId}'] > td[volume='${volume}']`).text();
// $('#GrandTotal').val(sum); // give the final sum from Log
});
});
return sum;
}
// to calculate Grand total
function getDivSum(selector) {
var sum = 0;
$(selector).each(function() {
$(this).find("span").each(function() {
sum = parseInt($(this).html());
$('#GrandTotal').val(parseInt($(this).html()));
// $('#GrandTotal').val(sum); // give the final sum from Log
});
});
return sum;
}
console.log(getDivSum("#sumDiv"))
$("#GrandTotal").next().html(getDivSum("#sumDiv"))
$(document).ready(function() {
console.log(getDivSum("#sumDiv"));
});
});
}
$('.select').on('change', myCalculate);
$("input[type='text']").on('keyup', myCalculate);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<label class="description" for="ProductOrigin">Product Origin</label>
<select class="element select medium" id="ProductOrigin" name="ProductOrigin">
<option value="" selected="selected"></option>
<option value="Europe">Europe</option>
<option value="Asia">Asia</option>
<option value="China">China</option>
<option value="India">India</option>
<option value="USA">USA</option>
<option value="Africa">Africa</option>
</select>
</div>
<div>
<label class="description" for="GeoLocation">Geographical Location</label>
<select class="element select medium" id="GeoLocation" name="GeoLocation">
<option value="" selected="selected"></option>
<option value="England">England</option>
<option value="Scotland">Scotland</option>
<option value="Wales">Wales</option>
</select>
</div>
<div>
<label class="description" for="Volume">Volume</label>
<select class="element select medium" id="Volume" name="Volume">
<option value="" selected="selected"></option>
<option value="10">10</option>
<option value="100">100</option>
<option value="1000">1000</option>
</select>
</div>
<div id="sumDiv">
<div>
<label class="description" for="Apple">Apple</label>
<input id="Apple" name="Apple" class="element text medium" type="text" maxlength="255" value="" my_value ="10" readonly="true"/>
</div>
<div>
<label class="description" for="Apricot">Apricot</label>
<input id="Apricot" name="Apricot" class="element text medium" type="text" maxlength="255" value="" my_value ="20" readonly="true"/>
</div>
<div>
<label class="description" for="Banana">Banana</label>
<input id="Banana" name="Banana" class="element text medium" type="text" maxlength="255" value="" my_value ="20" readonly="true"/>
</div>
<div>
<label class="description" for="GrandTotal">Grand Total</label>
<input id="GrandTotal" name="GrandTotal" class="element text medium" type="text" maxlength="255" value="" readonly="true"/>
</div>
</div>
<table id="Europe">
<thead>Europe</thead>
<tr>
<td>Europe</td>
<th id=10>10</th>
<th id=100>100</th>
<th id=1000>1000</th>
</tr>
<tbody>
<tr product='Apple'>
<td>Apple</td>
<td volume='10'>0.1</td>
<td volume='100'>0.5</td>
<td volume='1000'>1</td>
</tr>
<tr product='Apricot'>
<td>Apricot</td>
<td volume='10'>0</td>
<td volume='100'>0</td>
<td volume='1000'>0</td>
</tr>
<tr product='Banana'>
<td>Banana</td>
<td volume='10'>0.1</td>
<td volume='100'>0.5</td>
<td volume='1000'>1</td>
</tr>
</tbody>
</table>
для тестирования, пожалуйста, выберите Происхождение продукта: Европа, географическое местоположение: пустое и любой объем из выпадающего списка
Комментарии:
1. для тестирования, пожалуйста, выберите Происхождение продукта: Европа и географическое местоположение: пусто
Ответ №1:
Используйте нижеприведенную строку для замены ввода:
// Insert result after the current input field.
$(this).after(result);
Чтобы вычислить общее количество, мне удалось устранить проблемы, установка значения для каждого ввода была достигнута с помощью этой строки:
// Вставить результат после текущего поля ввода. $(это).после (результат);
и получение отправки достигается с помощью этой строки
sum = $(this).text();
//console.log("Value sum " sum);
$('#GrandTotal').val(sum);