我得到这个错误,它是从jquery框架起源.当我试图加载一个选择列表上的文档准备我得到这个错误.我似乎找不到为什么我得到这个错误.
它适用于更改事件,但我在尝试手动执行函数时出现错误。
Uncaught TypeError:Cannot read property 'toLowerCase' of undefined -> 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");
}
});
}
字符串
7条答案
按热度按时间rdlzhqv91#
当您在DOMReady上调用
loadTeachers()
时,this
的上下文将不是#CourseSelect
元素。您可以通过在加载DOM时触发
#CourseSelect
元素上的change()
事件来修复此问题:字符串
或者可以使用
$.proxy
来更改函数运行的上下文:型
或者上面的vanilla JS等价物,
bind()
:型
cyvaqqii2#
我也遇到了同样的问题,我试图监听一些select上的更改,实际上问题是我使用了事件而不是event.target,它是select对象。
错误:
字符串
正确:
型
1cklez4t3#
当您通过change事件调用
$(this).val()
时,访问$(this).val()
会导致错误。this
指向调用程序,即CourseSelect
,因此它正在工作,并将获得CourseSelect
的值。但当您手动调用它时,this
指向document。因此,您必须传递CourseSelect
对象或像$("#CourseSelect").val()
那样直接访问,而不是$(this).val()
的值。“8aqjt8rx4#
这对我来说很有效!
不带参数调用函数
字符串
调用带参数的函数
型
evrscar25#
它失败“
when trying to execute the function manually
“,因为你有一个不同的”this“。这将不是你在手动调用方法时想到的东西,而是其他东西,可能是窗口对象,或者你在手动调用时拥有的任何上下文对象。wxclj1h56#
你的$(this).瓦尔()在你的apache调用中没有作用域,因为它不在change事件函数作用域中
可能你首先在你的变更事件本身中实现了那个aEvent调用,在这种情况下它工作得很好。但是当你创建了一个函数并在变更事件中调用那个函数时,$(this).瓦尔()的作用域是无效的。
简单地使用id选择器而不是
字符串
整个代码应该是这样的:
型
jbose2ul7#
一个简单的方法来解决这个问题:
首先尝试在项目中全局查找
toLowerCase
。如果找到,则尝试在toLowerCase之前添加?。字符串
如果在项目中找不到toLowerCase,
型
我希望它能起作用。