2017-08-12 6 views
1

マウスが去ったときに.closeクラスを要素に追加してから、このクラスを削除したいと考えています。JQuery:変更された要素にアクセスできない

$("#nav > li").mouseleave(function(){ 
    alert($(this).children(".subs").length); // value 1 
    $(this).children(".subs").addClass("close"); 
    setTimeout(function() { 
     alert($(this).children(".subs").length) 
    }, 500); // value 0 
}); 

クラスを追加した後で、要素にアクセスできません。この仕事をするにはどうすればいいですか?アクション前

HTML:アクションの後

<div class="subs" id="service-subs" aria-haspopup="false"> 
    stuff 
</div> 

HTML:

<div class="subs close" id="service-subs" aria-haspopup="false"> 
    stuff 
</div> 
+0

'close'クラスを追加した後、あなたのhtmlを調べて、' .subs'がまだその要素に存在するかどうかを確認してください。 –

+0

それでも。また、スタイルの追加を追加すると同じ問題が発生します。 – NagyDani

+0

'mouseleave'の実行が終了した後にあなたのhtmlを見たいと思います。このようなことを問題の原因と考えるのは難しいです。 –

答えて

0

this変数はイベント火災やthis変数が値をしていないときに呼び出さsetTimeout関数の後に空になっているためそれはあります。値thisを別の変数に格納することができます。私はちょうどそのよう矢印の機能を使用するこの種の状況で

$("#nav > li").mouseleave(function(){ 
    var $this = $(this); 
    alert($this.children(".subs").length); 
    $this.children(".subs").addClass("close"); 
    setTimeout(function() { 
     alert($this.children(".subs").length) 
    }, 500); 
}); 
0

setTimeout(()=>{ 
    //$(this) would work here as you intended 
}, 500); 

矢印機能(()=>{})デフォルトでthis設定されていません。だから、thisが見つかるまで上がるだろう。
IMHO;これは、ES6以降のコールバックを実行するための推奨方法です。

関連する問題