下拉更改事件调用页面加载而不是实际的点击更改

时间:2014-11-09 00:14:02

标签: jquery

当用户在页面上更改了多个(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);
                }
            });
          });
});

1 个答案:

答案 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等等但是不要引用我的语法......可能会有点偏差: - )