我收到此错误,它来自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");
}
});
}
答案 0 :(得分:39)
当您在DOMReady上调用loadTeachers()
时,this
的上下文将不是#CourseSelect
元素。
您可以通过在加载DOM时在change()
元素上触发#CourseSelect
事件来解决此问题:
$("#CourseSelect").change(loadTeachers).change(); // or .trigger('change');
或者可以使用$.proxy
来更改函数运行的上下文:
$("#CourseSelect").change(loadTeachers);
$.proxy(loadTeachers, $('#CourseSelect'))();
或者上面的香草JS等同物bind()
:
$("#CourseSelect").change(loadTeachers);
loadTeachers.bind($('#CourseSelect'));
答案 1 :(得分:17)
我有同样的问题,我试图在某些选择上听取更改,实际上问题是我使用的是事件而不是event.target,它是选择对象。
不正确:
$(document).on('change', $("select"), function(el) {
console.log($(el).val());
});
正确:
$(document).on('change', $("select"), function(el) {
console.log($(el.target).val());
});
答案 2 :(得分:2)
它失败了“when trying to execute the function manually
”,因为你有一个不同的'this'。这不是指在手动调用方法时想到的东西,而是指其他东西,可能是窗口对象,或者手动调用时的任何上下文对象。
答案 3 :(得分:2)
当您通过更改事件$(this).val()
调用指向调用者this
时访问CourseSelect
时会导致错误,因此它正在工作,并且将获得{{1}的值}}。但是当你手动调用它时CourseSelect
指向文档。因此,您必须传递this
对象或直接访问,例如CourseSelect
而不是$("#CourseSelect").val()
。
答案 4 :(得分:2)
这对我有用!!!
调用不带参数的函数
$("#CourseSelect").change(function(e1) {
loadTeachers();
});
使用参数调用函数
$("#CourseSelect").change(function(e1) {
loadTeachers($(e1.target).val());
});
答案 5 :(得分:0)
你的$(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"); }
});
}