jquery 未捕获的TypeError:无法读取未定义的属性“toLowerCase”

bbuxkriu  于 2024-01-07  发布在  jQuery
关注(0)|答案(7)|浏览(195)

我得到这个错误,它是从jquery框架起源.当我试图加载一个选择列表上的文档准备我得到这个错误.我似乎找不到为什么我得到这个错误.
它适用于更改事件,但我在尝试手动执行函数时出现错误。
Uncaught TypeError:Cannot read property 'toLowerCase' of undefined -> jquery-2.1.1.js:7300
这里是代码

  1. $(document).ready(function() {
  2. $("#CourseSelect").change(loadTeachers);
  3. loadTeachers();
  4. });
  5. function loadTeachers() {
  6. $.ajax({
  7. type: 'GET',
  8. url: '/Manage/getTeachers/' + $(this).val(),
  9. dataType: 'json',
  10. cache: false,
  11. success:function(data) {
  12. $('#TeacherSelect').get(0).options.length = 0;
  13. $.each(data, function(i, teacher) {
  14. var option = $('<option />');
  15. option.val(teacher.employeeId);
  16. option.text(teacher.name);
  17. $('#TeacherSelect').append(option);
  18. });
  19. },
  20. error: function() {
  21. alert("Error while getting results");
  22. }
  23. });
  24. }

字符串

rdlzhqv9

rdlzhqv91#

当您在DOMReady上调用loadTeachers()时,this的上下文将不是#CourseSelect元素。
您可以通过在加载DOM时触发#CourseSelect元素上的change()事件来修复此问题:

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

字符串
或者可以使用$.proxy来更改函数运行的上下文:

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


或者上面的vanilla JS等价物,bind()

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

展开查看全部
cyvaqqii

cyvaqqii2#

我也遇到了同样的问题,我试图监听一些select上的更改,实际上问题是我使用了事件而不是event.target,它是select对象。

错误:

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

字符串

正确:

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

展开查看全部
1cklez4t

1cklez4t3#

当您通过change事件调用$(this).val()时,访问$(this).val()会导致错误。this指向调用程序,即CourseSelect,因此它正在工作,并将获得CourseSelect的值。但当您手动调用它时,this指向document。因此,您必须传递CourseSelect对象或像$("#CourseSelect").val()那样直接访问,而不是$(this).val()的值。“

8aqjt8rx

8aqjt8rx4#

这对我来说很有效!

不带参数调用函数

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

字符串

调用带参数的函数

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

展开查看全部
evrscar2

evrscar25#

它失败“when trying to execute the function manually“,因为你有一个不同的”this“。这将不是你在手动调用方法时想到的东西,而是其他东西,可能是窗口对象,或者你在手动调用时拥有的任何上下文对象。

wxclj1h5

wxclj1h56#

你的$(this).瓦尔()在你的apache调用中没有作用域,因为它不在change事件函数作用域中
可能你首先在你的变更事件本身中实现了那个aEvent调用,在这种情况下它工作得很好。但是当你创建了一个函数并在变更事件中调用那个函数时,$(this).瓦尔()的作用域是无效的。
简单地使用id选择器而不是

  1. $(#CourseSelect).val()

字符串
整个代码应该是这样的:

  1. $(document).ready(function ()
  2. {
  3. $("#CourseSelect").change(loadTeachers);
  4. loadTeachers();
  5. });
  6. function loadTeachers()
  7. {
  8. $.ajax({ type:'GET', url:'/Manage/getTeachers/' + $(#CourseSelect).val(), dataType:'json', cache:false,
  9. success:function(data)
  10. {
  11. $('#TeacherSelect').get(0).options.length = 0;
  12. $.each(data, function(i, teacher)
  13. {
  14. var option = $('<option />');
  15. option.val(teacher.employeeId);
  16. option.text(teacher.name);
  17. $('#TeacherSelect').append(option);
  18. });
  19. }, error:function(){ alert("Error while getting results"); }
  20. });
  21. }

展开查看全部
jbose2ul

jbose2ul7#

一个简单的方法来解决这个问题:
首先尝试在项目中全局查找toLowerCase。如果找到,则尝试在toLowerCase之前添加?。

  1. Example: str?.toLowerCase()

字符串
如果在项目中找不到toLowerCase,

  1. clear your browser history and cache.


我希望它能起作用。

相关问题