我正在创建一个使用jQuery打开和关闭的菜单。简单来说,它的工作原理如下:
function open_menu() {
$(this).next('ul.sub-menu').css('display', 'block').stop(true, false).animate({
width: '235px',
}, 500);
}
function close_menu() {
// close code here
}
status = 'closed'; // set the default menu status
$('a').click(function() {
switch(status) {
case 'closed':
open_menu();
break;
case 'open':
close_menu();
break;
}
}
如果我在open_menu()
事件中使用open_menu()
的内容并将其替换为.click()
,则每个内容都按预期工作。如果我使用上面显示的代码,则$(this)
无法确定.click()
已解雇该代码并且代码未运行。
我可以采取哪些措施让$(this)
选择器协商将其保留在open_menu()
中的内容吗?
答案 0 :(得分:20)
this
中引用的open_menu
是open_menu
函数的上下文,而不是链接的点击处理程序。你需要做这样的事情:
open_menu(this);
function open_menu(that) {
$(that).next(...
答案 1 :(得分:5)
您可以使用apply在函数中设置this
的值。
open_menu.apply(this)
答案 2 :(得分:3)
为什么不直接将其作为参数传递?
function open_menu($this) {
$this.next('ul.sub-menu').css('display', 'block').stop(true, false).animate({
width: '235px',
}, 500);
}
function close_menu() {
// close code here
}
status = 'closed'; // set the default menu status
$('a').click(function() {
switch(status) {
case 'closed':
open_menu($(this));
break;
case 'open':
close_menu();
break;
}
}