我存储了一个jquery对象(一个html元素的集合),但是当我在另一个函数中引用该对象时,它返回为'undefined'!这是我的代码:
this.container = $('#slide-menu'), // The menu container (e.g. a UL)
this.items = this.container.find('.menu-item'); // The menu items (e.g. all li's)
this.links = this.items.find('.link'); // The menu links
this.getCurrent(); // Set the current menu-item
this.getPrev(); // Set the previous menu-item
this.getNext(); // Set the next menu-item
console.log(this.items); // !!! The items exist here !!!
// Setup the menu items click events:
this.items.bind('click', function(e) {
console.log(this.items); // !!! But not here !!! ???
e.preventDefault();
o = $(e.currentTarget); // Set jquery object
if (!o.hasClass('active')) { // Prevent action on current menu-item
this.items.find('.active').removeClass('active'); // Remove the current active menu-item
o.addClass('active'); // Set new active menu item
有没有人知道为什么会这样,因为它让我发疯,据我所知,这应该是不可能的。 javascript坏了吗?!嗯,你觉得怎么样?
答案 0 :(得分:4)
jquery对象何时不是对象?
从不。
当它未定义时!
或者当它不在您认为的位置时。
有没有人知道为什么会这样,因为它正在推动 我疯了,据我所知,这应该是不可能的。是 javascript坏了吗?!嗯,你觉得怎么样?
不,Javascript没有“破坏”。
您认为this.items
总是指同一件事。它不是。在bind
内,this
是被点击的内容,而不是该回调函数之外的内容。
在你的回调中,你应该写$('#slide-menu').find('menu-item')
而不是this.items
。
答案 1 :(得分:2)
这是一个范围问题。
点击事件处理程序之外的 this
与处理程序内的this
不同。在处理程序内部,它引用被单击的元素。在外面它可能是全局窗口对象。
这应该可以正常工作:
var items = this.container.find('.menu-item');
items.bind('click', function(e) {
console.log(items);
除非您确实需要,否则请勿在JavaScript中使用this
。