Мой код jQuery-AJAX в моем проекте Django для отображения значения по умолчанию в поле, основанном на вычислениях, не может этого сделать?

#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. Исправил это. Я обновил свой пост. Ближе к концу я добавил исправленный код. Кстати, спасибо. 🙂