2016-12-07 51 views
0

下面我有麻煩女巫功能:通JS變量從jquery的

inactive() { 
     let target = $('.album__item--cover-container'); 
     var leave:boolean; 
     target.mouseleave(function() { 
      leave = true; 
      console.log("LEAVE MOUSEENTER: ", leave); 
     }); 
     console.log("LEAVE: ", leave); 
     if (leave) { 
      console.log("LEAVE CONDITION: ", leave); 
      this.flyOut = 'inactive'; 
     } 
     console.log(this.flyOut); 
    } 

我不知道西隧日誌"LEAVE MOUSEENTER"是真實的,從鼠標事件退出後登錄"LEAVE「是undefined我不能在這個事件函數declate this.flyOut = true。請人helop我,並解釋爲什麼這種行爲去呀?

問候 格雷格

+1

也許這是範圍問題。你可以使用箭頭功能嗎? targer.mouseleave(()=> {...})。也許改變var讓 – Kyrsberg

+0

你是對的。缺少.bind(this)賦值,默認情況下哪些箭頭函數具有。謝了哥們! –

回答

0

if (leave) { 

不在mouseleave函數回調中。所以當第一次調用inactive()時,leave已被聲明爲沒有任何默認值(它是undefined)。如果被調用。 只有在調用mouseleave事件時纔會發生。

1

我認爲你的問題是因爲你沒有做任何事情在鼠標離開事件的回調。

只有在inactive()被調用時纔會運行一次。

if (leave) { 
    console.log("LEAVE CONDITION: ", leave); 
    this.flyOut = 'inactive'; 
} 

我假設你正在嘗試設置鼠標離開某個狀態,然後要檢查是否this.flyOut是無效的?

(function ($) {// just some wrapper 
    let flyOut = 'inactive' 
    const target = $('.album__item--cover-container'); // Use const if you know it wont change 
    const check = $('.check-button-class-thing'); 

    target.mouseleave(function() { 
     flyOut = 'inactive' 
    }); 

    target.mouseenter(function() { 
     flyOut = 'active' 
    }); 

    check.click(function() { 
     console.log(inactive()); // Is it inactive or not 
    }); 

    function inactive() { 
     return flyOut === 'inactive' ? true : false; 
    } 
})(jQuery); 

我在這裏對你的用例做了一些假設,但我希望這有助於。代碼本身並不是非常有用,因爲它取決於.check-button-class-thing的嵌套位置,但它只是一個示例。

+0

缺少.bind(this)賦值,哪些箭頭函數默認情況下是這樣,但也可以通過你的方式完成:)謝謝你的回覆! –