【问题标题】:Using '$(this)' In A Function在函数中使用 '$(this)'
【发布时间】:2012-02-03 00:49:08
【问题描述】:

我正在创建一个使用 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;
    }
}

如果我在.click() 事件中取open_menu() 的内容并将其替换为open_menu(),则每个都按预期工作。如果我使用上面显示的代码,$(this) 无法确定.click() 触发了它并且代码不会运行。

我可以做些什么来让$(this) 选择器协商触发它的原因,同时将其保留在open_menu() 中?

【问题讨论】:

    标签: jquery function this


    【解决方案1】:

    您在open_menu 中引用的thisopen_menu 函数的上下文,而不是链接的点击处理程序。你需要做这样的事情:

    open_menu(this);
    
    function open_menu(that) {
        $(that).next(...
    

    【讨论】:

      【解决方案2】:

      您可以使用apply在函数中设置this的值。

      open_menu.apply(this)
      

      【讨论】:

      • +1 回答问题... “我可以做些什么来让$(this) 选择器协商触发它的原因,同时将其保留在open_menu() 中”
      【解决方案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;
          }
      }
      

      【讨论】:

      • 我试过这个,但我可能做得不好。我在开关前添加了test = $(this); 并将其传入。听起来对吗?
      猜你喜欢
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 2012-05-07
      • 2011-02-15
      相关资源
      最近更新 更多