#javascript #jquery #django #ajax #django-templates
#язык JavaScript #jquery #джанго #аякс #django-шаблоны
Вопрос:
Это две из немногих моделей в моем проекте:
class Package(models.Model): patient=models.ForeignKey(Patient, on_delete=CASCADE) diagnosis=models.ForeignKey(Diagnosis, on_delete=CASCADE) treatment=models.ForeignKey(Treatment, on_delete=CASCADE) patient_type=models.ForeignKey(PatientType, on_delete=CASCADE) date_of_admission=models.DateField(default=None) max_fractions=models.IntegerField(default=None) total_package=models.DecimalField(max_digits=10, decimal_places=2) package_date=models.DateTimeField(auto_now_add=True) class Receivables(models.Model): patient=models.ForeignKey(Patient, on_delete=CASCADE) rt_number=models.CharField(max_length=15) discount=models.DecimalField(max_digits=9, decimal_places=2, default=0) approved_package=models.DecimalField(max_digits=10, decimal_places=2) approval_date=models.DateField(default=None) proposed_fractions=models.IntegerField() done_fractions=models.IntegerField() base_value=models.DecimalField(max_digits=10, decimal_places=2, blank=True) expected_value=models.DecimalField(max_digits=10, decimal_places=2, blank=True) receivables_date=models.DateTimeField(auto_now_add=True)
Мне нужно approved_package
было, чтобы in Receivables
отображал default
значение, вычисленное путем вычитания discount
из total_package
in Package
. И все это должно происходить в режиме реального времени. Поэтому я написал AJAX
код Jquery
в HTML
файле, а included
файл в моем основном template
. Код выглядит следующим образом:
lt;scriptgt; $('select').change(function () { var optionSelected = $(this).find("option:selected"); var valueSelected = optionSelected.val(); var textSelected = optionSelected.text(); var csr = $("input[name=csrfmiddlewaretoken]").val(); console.log(textSelected); pkg={patient:textSelected, csrfmiddlewaretoken:csr} $.ajax({ url:"{% url 'pt_name' %}", method: "POST", data: pkg, dataType: "json", success: function(data){ console.log(data); console.log(data.pkg); console.log(data.ptt); var tp=data.pkg; var ptt=data.ptt; $('#id_discount').change(function(){ console.log('tp value: ', tp); console.log('ptt value: ', ptt); var discount=document.getElementById('id_discount').value; console.log('discount value: ', discount); var approved_package=document.getElementById('id_approved_package').value; if (ptt=='CASH') approved_package=tp-discount; console.log('approved package new value: ', approved_package); }); } }); }); lt;/scriptgt;
Код отлично работает в console
браузере. Он запускает все коды. Он вычисляет approved_package
, но результат по-прежнему не отображается в поле в качестве значения по умолчанию, когда я ввожу discount
значение. Что не так с моим кодом? Может ли кто-нибудь указать на это?
понял
Все должно было быть так:
var approved_package=document.getElementById('id_approved_package'); if (ptt=='CASH') approved_package.value=tp-discount;
Ответ №1:
Я думаю, вы забыли изменить значение Html-элемента после вычисления нового значения approved_package.
var approved_package=document.getElementById('id_approved_package').value; if (ptt=='CASH') approved_package.value=tp-discount; console.log('approved package new value: ', approved_package);
Комментарии:
1. Он показывает следующую ошибку: (индекс):81 Неучтенная ошибка типа: document.getElementById(…).значение не является функцией
2. Если я не ошибаюсь, val () — это функция, а значение-нет. Это просто атрибут.
3. можете ли вы поделиться своим HTML-файлом
4. Исправил это. Я обновил свой пост. Ближе к концу я добавил исправленный код. Кстати, спасибо. 🙂