Я работаю над системой управления школой, и после работы над всеми ошибками я не могу исправить эту ошибку! В моей системе вы можете выбрать из раскрывающегося списка родителей ребенка (отец и мать), информация сохраняется в базе данных правильно, но при редактировании / просмотре возникает проблема.
После того, как вы закроете модальное окно для первого ребенка и перейдете ко второму, а затем обратно к первому, отец и мать покажут родительские данные предыдущего ребенка.
Я попытался очистить значение выпадающего списка select / unselecting до того, как он будет заполнен ajax, но безрезультатно. Вот код, и он выполняется только тогда, когда вы нажимаете кнопку редактирования в строке дочерних элементов:
$.ajax({
url: base_url + 'student/fetchStudentData/'+studentId,
type: 'post',
cache: false,
dataType: 'json',
success:function(response){
// UNSELECT THE DROP DOWNS TO RESET
//$('#editSex').find("option:selected").prop('selected',false);
//$('#editFatherId').find("option:selected").prop('selected',false);
//$('#editMotherId').find("option:selected").prop('selected',false);
$("#editFname").val(response.fname);
$("#editLname").val(response.lname);
$("#editDob").val(response.dob);
// NOW SELECT THE OPTION
$('#editSex option[value='+ response.sex +']').attr('selected','selected');
$('#editFatherId option[value='+ response.father_id +']').attr('selected','selected');
$('#editMotherId option[value='+ response.mother_id +']').attr('selected','selected');
$("#editAge").val(response.age);
$("#editContact").val(response.contact);
$("#editEmail").val(response.email);
$("#editAddress").val(response.address);
$("#editCity").val(response.city);
$("#editCountry").val(response.country);
$("#editRegisterDate").val(response.register_date);
$("#editClassName").val(response.class_id);
$("#editSectionName").load('student/fetchClassSection/'+response.class_id, function(i) {
$("#editSectionName").val(response.section_id);
});
$("#student_photo").attr('src', base_url + response.image);
$("#editClassName").unbind('change').bind('change', function() {
var class_id = $(this).val();
$("#editSectionName").load('student/fetchClassSection/'+class_id);
});
HTML И PHP:
<!-- FATHER -->
<div class = "form-group">
<label for = "editFatherId" class = "col-sm-4 control-label">Father</label>
<div class = "col-sm-8">
<select class = "form-control" name = "editFatherId" id = "editFatherId">
<option value = "">Select</option>
<?php foreach ($parentsDataMale as $key => $value) { ?>
<option value = "<?php echo $value['parents_id'] ?>"><?php echo $value['fname'] . ' ' . $value['lname'] ?></option>
<?php } // /forwach ?>
</select>
</div>
</div>
<!-- MOTHER -->
<div class = "form-group">
<label for = "editMotherId" class = "col-sm-4 control-label">Mother</label>
<div class = "col-sm-8">
<select class = "form-control" name = "editMotherId" id = "editMotherId">
<option value = "">Select</option>
<?php foreach ($parentsDataFemale as $key => $value) { ?>
<option value = "<?php echo $value['parents_id'] ?>"><?php echo $value['fname'] . ' ' . $value['lname'] ?></option>
<?php } // /forwach ?>
</select>
</div>
</div>
Я отредактировал вопрос. Спасибо
Где вы заполняете элементы select, такие как #editSex, #editLname and #editMotherId?
Они уже заполнены, и вы просто выбираете значения, поступающие из базы данных, или вы их тоже заполняете?
Единственное, что я могу представить - или лучше предположить - из вашего вопроса (источник HTML форм будет хорош), это то, что когда вы устанавливаете значения с помощью селекторов jQuery, может случиться так, что более одного элемента формы соответствует селектору. То есть $("#editAge").val(response.age) устанавливает значение для элементов формы все, имеющих идентификатор editAge. Я полагаю, у вас есть несколько элементов формы с одним и тем же идентификатором.
информация заполняется через PHP, массив данных предоставляет раскрывающийся список, я просто использую JS для выбора опции, полученной от AJAX
@TheCoprolal Я думал, что это так, но я могу просматривать любое количество записей, и данные верны, но как только я возвращаюсь к информации о дочерних элементах более одного раза, он просто показывает информацию о предыдущих дочерних элементах оттуда в
Это не MCVE. Нам нужны полные этапы воссоздания, так что ваш HTML и т. д. Добавленный вами блок кода лишь незначительно полезен. Представление о вашем HTML совершенно не помогает
@Liam, я добавил HTML
Хорошо, в прошлый раз, пожалуйста, прочтите ссылка, которую я разместил, а также этот Как создать минимальный, полный и проверяемый пример. Вам необходимо ввести достаточно кода в вопрос, чтобы мы могли проверить вашу проблему и воспроизвести это. Иначе мы все только догадываемся. Это не поможет ни вам, ни нам. Мы не можем воспроизвести вашу проблему на основе того, что вы опубликовали. Создайте полностью рабочую скрипку jsfiddle.net Я предполагаю, что когда вы это сделаете, она либо сработает, либо вы сами обнаружите свою проблему.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны «отменить выбор» всех параметров перед тем, как «выбрать» тот, который использует данные json. Иначе вы рискуете выбрать более одного ... И это странно.
Также используйте логическое свойство вместо того, чтобы играть с атрибутом.
// NOW SELECT THE OPTION
$('#editSex option').prop('selected',false);
$('#editSex option[value='+ response.sex +']').prop('selected',true);
$('#editFatherId option').prop('selected',false);
$('#editFatherId option[value='+ response.father_id +']').prop('selected',true);
$('#editMotherId option').prop('selected',false);
$('#editMotherId option[value='+ response.mother_id +']').prop('selected',true);
Привет, палец вверх, ваш ответ решил проблему, это было близко к тому, что я делал, спасибо за помощь. Между вами, Мохаммедом и Лиамом, вы решили мои проблемы. Извините, что не очень помог в моем вопросе!
Такое поведение было нелегко объяснить ... Рад, что это помогло.
Вместо использования
$('#editSex option[value='+ response.sex +']').attr('selected','selected');
$('#editFatherId option[value='+ response.father_id +']').attr('selected','selected');
$('#editMotherId option[value='+ response.mother_id +']').attr('selected','selected');
Пытаться
$('#editSex').val(response.sex);
$('#editFatherId ').val(response.father_id );
$('#editMotherId ').val(response.mother_id );
Если вы хотите использовать то, что уже используете, попробуйте использовать опору для true.
$('#editSex option[value='+ response.sex +']').prop('selected',true);
$('#editFatherId option[value='+ response.father_id +']').prop('selected',true);
$('#editMotherId option[value='+ response.mother_id +']').prop('selected',true);
Пожалуйста, создайте Минимальный, полный и проверяемый пример вашей проблемы