2017-06-03 21 views
1
var ssOffCanvas = function() { 
      var menuTrigger = $('#header-menu-trigger'), 
      nav    = $('#menu-nav-wrap'), 
      closeButton  = nav.find('.close-button'), 
      siteBody  = $('body'), 
      mainContents = $('section, footer'); 

     // open-close menu by clicking on the menu icon 
     menuTrigger.on('click', function(e){ 
      e.preventDefault(); 
      menuTrigger.toggleClass('is-clicked'); 
      siteBody.toggleClass('menu-is-open'); 
     }); 
    }; 

proj_request_menu.onclick = function() { 
    modal.style.display = "block"; 
}; 

什麼它最適合的方式來調用proj_request_menu功能ssOffCanvas對象menuTrigger調用對象的方法。我知道要在對象內部處理這個問題。 例如:menuTrigger.trigger('click'); 需要你的幫助...如何從javascript函數

+0

您需要從'ssOffCanvas'才能訪問它的函數返回超出'menuTrigger'。 – Dominik

回答

-1

Make menuTrigger global?

var menuTrigger=null; 
var ssOffCanvas = function() { 
     menuTrigger = $('#header-menu-trigger'), 
     nav    = $('#menu-nav-wrap'), 
     closeButton  = nav.find('.close-button'), 
     siteBody  = $('body'), 
     mainContents = $('section, footer'); 

    // open-close menu by clicking on the menu icon 
    menuTrigger.on('click', function(e){ 
     e.preventDefault(); 
     menuTrigger.toggleClass('is-clicked'); 
     siteBody.toggleClass('menu-is-open'); 
    }); 
}; 

proj_reququest_menu.onclick = function() { 
if(menuTrigger) menuTrigger.trigger("click"); 
}; 
+0

我的要求是觸發用來做開關菜單的代碼。 – pTi

0

首先你必須修改你的對象定義,以便你的變量可以從外部訪問。現在,當您使用var關鍵字(或constlet)在對象內創建變量時,它將其視爲只能在該對象內使用的私有屬性。所以,你必須使之成爲一個特權與關鍵字this(對象的特權屬性可以從外部訪問)是這樣的:

var ssOffCanvas = function(){ 
    this.menuTrigger = $('#header-menu-trigger'); 
    ... 
}; 

注意this關鍵字this.menuTrigger

爲了獲取對象的屬性首先你必須初始化它:

let myCanvas = new ssOffCanvas(); 

然後你就能獲得屬性:

myCanvas.menuTrigger; // returns $('#header-menu-trigger') value 

這樣做與其他屬性。讓我知道它是否有效。

+0

是否正確添加讓?這不是關鍵嗎? – pTi

+0

如果你希望你的對象屬性可以從外部訪問,你必須做的是刪除'var'或'let'並使用'this.yourProperty'。 'let'與'var'關鍵字相同,但在聲明之前'let'變量不可訪問,並且不能從聲明的塊外部訪問。保持你的代碼無錯是理想的,因爲'var'會做一些奇怪的事情,比如你想避免的提升。 –

0

由於menuMenuTrigger不是從外部接近ssOffCanvas功能以最快的方式(最少的代碼更改)將其拉出當前的功能,像這樣:

// now menu Trigger is available on the global scope 
// and could be called from everywhere 
var menuTrigger = $('#header-menu-trigger'); 

var ssOffCanvas = function() { 
    var nav    = $('#menu-nav-wrap'), 
     closeButton  = nav.find('.close-button'), 
     siteBody  = $('body'), 
     mainContents = $('section, footer'); 

    // open-close menu by clicking on the menu icon 
    menuTrigger.on('click', function(e){ 
     e.preventDefault(); 
     menuTrigger.toggleClass('is-clicked'); 
     siteBody.toggleClass('menu-is-open'); 
    }); 
}; 

proj_request_menu.onclick = function() { 
    modal.style.display = "block"; 

    // now it is available here, too. 
    menuTrigger.trigger('click') 
}; 

我不太清楚,如果這是你打算什麼...

+0

獲取錯誤「ReferenceError:menuTrigger未定義」 – pTi

0

因爲沒有鍛鍊將代碼添加到對象中。

$('#proj_request_menu').on('click',function(){ 
      menuTrigger.trigger('click'); 
      }); 

最終代碼如下:

var ssOffCanvas = function() { 

      var menuTrigger = $('#header-menu-trigger'), 
      nav    = $('#menu-nav-wrap'), 
      closeButton  = nav.find('.close-button'), 
      siteBody  = $('body'), 
      mainContents = $('section, footer'); 


     // open-close menu by clicking on the menu icon 
     menuTrigger.on('click', function(e){ 
      e.preventDefault(); 
      menuTrigger.toggleClass('is-clicked'); 
      siteBody.toggleClass('menu-is-open'); 
     }); 

     // close menu by clicking the close button 
     closeButton.on('click', function(e){ 
      e.preventDefault(); 
      menuTrigger.trigger('click'); 
     }); 

     // close menu clicking outside the menu itself 
     siteBody.on('click', function(e){  
      if(!$(e.target).is('#menu-nav-wrap, #header-menu-trigger, #header-menu-trigger span')) { 
       menuTrigger.removeClass('is-clicked'); 
       siteBody.removeClass('menu-is-open'); 
      } 
     }); 
     $('#proj_request_menu').on('click',function(){ 
      menuTrigger.trigger('click'); 
      }); 

    }; 
var proj_request_menu= document.getElementById("proj_request_menu"); 
proj_request_menu.onclick = function() { 
    modal.style.display = "block"; 
};