Я пытаюсь получить значения всех скрытых полей ввода и найти сумму. Скрытое поле относится к классу mytotal. Ниже приведен код:
<div class = "row">
<div class = "col-md-2">
<label for = "brnos[]" class = "control-label" style = "width:100%">BR-NO</label>
<input class = "form-control mybrands" type = "text" style = "width:100%;text-align: center;" name = "brnos[]" autocomplete = "off" required>
<div id = "brList" style = "width:auto;"></div>
</div>
<div class = "col-md-2">
<label for = "cases[]" class = "control-label" style = "width:100%">Cases</label>
<input id = "cases" class = "form-control mycases" type = "number" style = "width:100%;text-align: center;" name = "cases[]" value = "0" autocomplete = "off" required>
<input class = "form-control mytotal" type = "hidden" style = "width:100%;text-align: center;" name = "mytotal" value = "0">
</div>
</div>
Я использую функцию для установки значения моего скрытого поля с помощью функции ajax, и она отлично работает. Ниже приведен код:
$(document).ready(function() {
var doc;
$(document).on("change", ".mycases", function() {
doc = $(this);
var value = doc.parent().parent('div').find('.mybrands').val();
var cases = doc.val();
var total_cases = $("#total_cases");
if (value!='')
{
var CSRF_TOKEN = $('meta[name = "csrf-token"]').attr('content');
$.ajax({
url: "{{ route('origin.find') }}",
type: 'POST',
data: {_token: CSRF_TOKEN,value:value},
success:function(data)
{
doc.parent('div').find('.mytotal').val(data.output*cases);
}
});
}
});
});
Я попытался предупредить значение .mytotal после изменения его значения внутри функции ajax, и оно показывает ожидаемое значение. Но когда я вызываю другую функцию ajax, чтобы найти сумму значений входов, имеющих класс «mytotal», он никогда не вызывается. Ниже мой код:
$(document).ready(function() {
$(document).on("change", ".mytotal", function() {
var sum = 0;
$(".mytotal").each(function(){
sum += +$(this).val();
window.alert(sum);
});
});
});
Поэтому вместо того, чтобы делать это скрытым полем, я сделал его как type = "number", и когда я вручную меняю значение этого поля, вызывается функция. Почему это происходит? Я хочу сделать это поле скрытым и функцию, которая будет вызываться при изменении ее значения. Как это решить? Пожалуйста помоги!
охххк! Что насчет моей проблемы?
Все еще читаю: P Если вы сделаете console.info(doc.parent('div').find('.mytotal').length), что вы получите? Кроме того, .val() не вызовет изменений, если вы не сделаете .val(...).trigger("change") (я думаю)
сейчас я получаю длину как 1
Это хорошо, пробовали добавить .trigger("change");? Этот должен запускает прослушиватель on("change"...).
Я считаю, что второй пункт @TimLewis, приведенный выше, правильно определяет источник путаницы. Событие change срабатывает, только если А)Пользователь изменяет значение входа, или Б) Вы вручную запускаете событие, вызывая .change() или .trigger("change").
Да, это сработало !!! спасибо ... .trigger ("изменение) - это решение. :)
Ответь .. Я буду поддерживать!

Определение функции .on("change", ...) - это так называемый слушатель, который обрабатывает, когда что-то «изменяется». В вашем коде вы правильно меняете значение с помощью
doc.parent('div').find('.mytotal').val(data.output*cases);
Но на самом деле это не запускает событие, которое обрабатывает ваш слушатель.
Чтобы правильно справиться с этим, все, что вам нужно сделать, это добавить функцию .trigger() после обновления .val():
doc.parent('div').find('.mytotal').val(data.output*cases).trigger("change");
На первый взгляд,
doc.parent().parent('div')не работает. Цепочка.parent()может быть проблематичной; рассмотрим.closest('.row'), который при перемещении вверх в DOM найдет ближайший к элементуclass = "row"