2016-01-11 54 views
0

我用jQuery打開和關閉了一些div。在函數中使用'this'的jQuery

代碼工作正常,直到我嘗試使用它作爲函數,其中,我認爲由於上下文/或作用域問題jQuery(this)我一直使用作爲選擇器從函數執行時不起作用。

的功能是這樣的:

function open_close_sections() { 
    if(jQuery('.question').hasClass('open')) { 
      jQuery(this).removeClass('open'); 
      jQuery(this).next().slideUp();    
      } 
      else 
      { 
      jQuery('.open').not(this).next().slideUp(); 
      jQuery('.open').not(this).removeClass('open'); 
      jQuery(this).addClass('open'); 
      jQuery(this).next().slideDown(); 
      } 

    } 

,我試圖用

jQuery('.question').click(open_close_sections()); 

調用它你可以看到在此筆功能的代碼工作外: http://codepen.io/amort2000/pen/KVqaqr 和未能在此筆功能上工作: http://codepen.io/amort2000/pen/YwQNOQ

+0

根據鏈接的愚蠢。 jQuery的'click'需要一個函數引用 - 而不是調用該函數的結果。刪除括號。 – Jamiec

+0

這是如何重複這個問題? – lascort

+0

你也可以使用bind來綁定上下文。另外''jQuery('。question')。click(open_close_sections());'應該是'jQuery('。question')。click(open_close_sections);' – Rajesh

回答

0
jQuery(document).ready(function() { 
    function open_close_sections(x) { 
    if (jQuery(x).hasClass('open')) { 
     jQuery(x).removeClass('open'); 
     jQuery(x).next().slideUp(); 
    } else { 
     jQuery('.open').not(x).next().slideUp(); 
     jQuery('.open').not(x).removeClass('open'); 
     jQuery(x).addClass('open'); 
     jQuery(x).next().slideDown(); 
    } 

    } 
    jQuery('.answer').hide(); 
    jQuery('.question').click(function() { 
    open_close_sections(this) 
    }); 
}); 
+0

非常感謝人 - 尤其是Rejith。這非常出色。現在,我要安靜地坐着一些jQuery教程,並嘗試完成我的遊戲。再次感謝,] – amort2000