繁体   English   中英

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

[英]Uncaught TypeError: Cannot read property 'toLowerCase' of undefined

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

它适用于更改事件,但我在尝试手动执行该函数时收到错误。

未捕获的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'。 这不是指在手动调用方法时想到的东西,而是指其他东西,可能是窗口对象,或者手动调用时的任何上下文对象。

当你通过更改事件调用它来访问$(this).val()时,它会导致错误, this指向调用者,即CourseSelect因此它正在工作,并且将获得CourseSelect的值。 但是当你手动调用它时, this指向文档。 所以你要么必须传递CourseSelect对象,要么直接访问$("#CourseSelect").val()而不是$(this).val()

这对我有用!!!

调用不带参数的函数

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

使用参数调用函数

$("#CourseSelect").change(function(e1) {
    loadTeachers($(e1.target).val());
});

你的$(this).val()在你的ajax调用中没有作用域,因为它不在更改事件函数范围内

可能是你首先在你的更改事件本身中实现了ajax调用,在这种情况下它可以正常工作。 但是当你创建一个函数并在change事件中调用该函数时,$(this).val()的作用域无效。

只需使用id选择器而不是获取值

$(#CourseSelect).val()

整个代码应该是这样的:

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

function loadTeachers()
{
    $.ajax({ type:'GET', url:'/Manage/getTeachers/' + $(#CourseSelect).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"); }
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM