2016-12-07 4 views
0

私は、以下のトラブル魔女機能があります。パスJS変数

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); 
    } 

を私はWHTログ"LEAVE MOUSEENTER"を知らない事実である、とマウスイベントログ"LEAVEから退出した後に "undefinedです。私は誰かが私をhelop、この動作は、その道を行く理由を説明してください。このイベント関数でthis.flyOut = trueをdeclateすることはできません?

よろしく グレッグ

+1

おそらくそれは範囲の問題です。矢印機能を使用できますか? targer.mouseleave(()=> {...})。そしておそらくvarを変更して – Kyrsberg

+0

としましょう。 .bind(this)の割り当てが欠落していました。この矢印の機能はデフォルトで持っています。ありがとう! –

答えて

0

if (leave) { 

は、mouseleave関数コールバックの範囲外です。したがって、最初にinactive()が呼び出されると、leaveはデフォルト値なしで宣言されています(それはundefinedです)。そしてifが呼び出されます。 mouseleaveイベントが呼び出された場合にのみ該当します。

1

マウス離脱イベントのコールバック内で何もしていないため、あなたの問題があると思います。

これは、inactive()が呼び出されたときに1回だけ実行されます。

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

私はあなたがmouseleave上で、いくつかの状態を設定しようとしていると仮定しています、そしてあなたは、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(この)割り当てがありませんでしたが、あなたのやり方でもやり遂げることができます:)返答ありがとう! –