我正在组合依赖下拉列表(教师->班级->学生),并且在设置下拉列表的初始状态时遇到问题。代码如下:
编辑合同.html
{% load crispy_forms_tags %}
<div>
<form method="post" id="contractForm" novalidate
data-teachers-url="{% url 'wakemeup:ajax_load_teachers' %}"
data-classes-url="{% url 'wakemeup:ajax_load_classes' %}"
data-students-url="{% url 'wakemeup:ajax_load_students' %}"
>
{% crispy form %}
</form>
</div>
<script>
// Update class drop-down when teacher changes
$("#id_teacheruserid").change(function () {
update_classes($(this))
});
// Update students drop-down when class changes
$("#id_classid").change(function () {
update_students($(this))
});
function update_teachers() {
// Get form values
var url = $("#contractForm").attr("data-teachers-url");
var contractId = $(document.getElementById("id_contractid")).val();
$.ajax({ // initialize AJAX request
url: url,
data: {
'contractid': contractId
},
success: function (data) {
$("#id_teacheruserid").html(data); // Update "teacheruserid" field
}
})
update_classes(); // Update classes drop-down
};
function update_classes() {
// Get form values
var url = $("#contractForm").attr("data-classes-url");
var teacherUserId = $(document.getElementById("id_teacheruserid")).val();
var contractId = $(document.getElementById("id_contractid")).val();
$.ajax({ // initialize AJAX request
url: url,
data: {
'teacheruserid': teacherUserId,
'contractid': contractId
},
success: function (data) {
$("#id_classid").html(data); // Update "classid" field
}
})
update_students(); // Update students drop-down
};
function update_students() {
// Get form values
var url = $("#contractForm").attr("data-students-url");
var classId = $(document.getElementById("id_classid")).val();
var contractId = $(document.getElementById("id_contractid")).val();
$.ajax({ // initialize AJAX request
url: url,
data: {
'classid': classId,
'contractid': contractId
},
success: function (data) {
$("#id_partyuserinfo").html(data); // Update "partyuserinfo" field
}
})
};
window.onload = function() {
// Initial load of drop-down menus
update_teachers(); // Cascades to update_classes() and update_students()
};
</script>
流量汇总表
更新教师()
-为“id\u teacheruserid”字段更新html(下拉选项)
更新类()
-从“id_teacheruserid”字段读取值(初始加载未定义)
-为“id\u classid”字段更新html(下拉选项)
更新学生()
-从“id_classid”字段读取值(初始加载未定义)
-为“id\u partyuserinfo”字段更新html(下拉选项)
问题
我看到的问题是脚本无法访问
onload()
打电话来。例如,这一行
update_classes()
以下内容:
var teacherUserId = $(document.getElementById("id_teacheruserid")).val();
我加了一个
alert(teacherUserId)
就在这条线后面。在初始页面加载时,它返回
undefined
是的。但是,当我从“教师”下拉列表中选择其他值时,警报将显示预期值。
我猜在开始的时候
加载()
,引用的字段值/选项(即
id_teacheruserid
)尚未加载或提供。田地本身存在,但回归
未定义
价值观。不过,一旦这个函数完成,它们似乎就可以访问,菜单的行为也如预期的那样。
我怎么能跑
update_teachers()
要进行初始加载并让它访问表单字段值?