Uncaught TypeError:无法读取未定义的属性'toLowerCase'

我收到这个错误,它来自jquery框架。 当我尝试加载文档准备好的选择列表时,我得到这个错误。 我似乎无法找到为什么我得到这个错误。

它适用于更改事件,但在尝试手动执行该功能时出现错误。

Uncaught TypeError:无法读取未定义的属性'toLowerCase' - > jquery-2.1.1.js:7300

这是代码

$(document).ready(function() {
    $("#CourseSelect").change(loadTeachers);
    loadTeachers();
});

function loadTeachers() {
    $.ajax({ 
        type: 'GET', 
        url: '/Manage/getTeachers/' + $(this).val(), 
        dataType: 'json', 
        cache: false,
        success:function(data) { 
            $('#TeacherSelect').get(0).options.length = 0;    
            $.each(data, function(i, teacher) {
                var option = $('<option />');
                option.val(teacher.employeeId);
                option.text(teacher.name);
                $('#TeacherSelect').append(option);
            });
        },         
        error: function() { 
            alert("Error while getting results"); 
        }
    });
}

当你调用loadTeachers()在domready中的情况下this不会是#CourseSelect元素。

您可以通过在加载DOM时在#CourseSelect元素上触发change()事件来解决此问题:

$("#CourseSelect").change(loadTeachers).change(); // or .trigger('change');

或者可以使用$.proxy来更改该函数在其下运行的上下文:

$("#CourseSelect").change(loadTeachers);
$.proxy(loadTeachers, $('#CourseSelect'))();

或者上面的vanilla JS相当于bind()

$("#CourseSelect").change(loadTeachers);
loadTeachers.bind($('#CourseSelect'));

我有同样的问题,我试图听取一些选择的变化,实际上问题是我使用的事件,而不是event.target这是选择对象。

错误:

$(document).on('change', $("select"), function(el) {
    console.log($(el).val());
});

正确:

$(document).on('change', $("select"), function(el) {
    console.log($(el.target).val());
});

它会在“ when trying to execute the function manually ”失败,因为您有不同的“this”。 当手动调用方法时,这不会引用您想到的内容,而是其他内容,可能是窗口对象,或手动调用时的任何上下文对象。

链接地址: http://www.djcxy.com/p/63193.html

上一篇: Uncaught TypeError: Cannot read property 'toLowerCase' of undefined

下一篇: TypeError: $ is not a function when calling jQuery function