当用户在页面上更改了多个(1到多个)下拉列表中的任何一个时,我需要使用和AJAX调用将数据发回服务器。问题是,当页面加载时填充下拉列表时,我认为它在我的jquery中触发了change事件。因为我在页面完成加载之前收到了一个空的错误页面,提到服务器中的AJAXUpdateAttendance
。
这是下拉列表的样子:
@Html.DropDownListFor(Function(m) m(i).Completed_Class, New SelectList(ViewBag._status), New With {.data_regId = currentItem.staff_id, .data_IsStaff = "true", .data_CourseRef = currentItem.course_ref, .class = "attendDrop", .data_url = Html.Action("AJAXUpdateAttendance", "Admin")})
Jquery的
$(function(){
$(".attendDrop").on("change keyup").change(function () {
var isStaff = $(this).attr('data-IsStaff');
if (isStaff) {
var classId = $(this).attr('data-CourseRef');
var regId = $(this).attr('data-regId');
var url = $(this).attr("data-url");
var sval = $(this).val();
$.ajax({
url: url,
data: {isStaff: isStaff, regId: regId, classId: classId, sVal: sval},
success: function (data) {
console.log(data.message);
}
});
});
});
答案 0 :(得分:1)
从技术上讲,您要渲染一个选择,然后更改"通过设置数据库中的值(或某个默认值)来获取值。所以只需在拨打电话之前检查你的javascript,你没有说哪些变量不能为空,所以为了举例,我假设其数据为regId:
$(function(){
$(".attendDrop").on("change keyup").change(function () {
var isStaff = $(this).attr('data-IsStaff');
if (isStaff) {
var classId = $(this).attr('data-CourseRef');
var regId = $(this).attr('data-regId');
var url = $(this).attr("data-url");
var sval = $(this).val();
if (regId != null) {
$.ajax({
url: url,
data: {isStaff: isStaff, regId: regId, classId: classId, sVal: sval},
success: function (data) {
console.log(data.message);
}
});
}
});
});
另外,使用jquery使用数据属性的一个好处是你可以使用
当数据属性为$(this).data('courseRef')
时, "data-course-ref"
你也可以设置一个像:
var dataAtts = $(this).data();
然后像对象一样使用它:dataAtts.courseRef, dataAtts.regId
等等但是不要引用我的语法......可能会有点偏差: - )