2016-11-30 11 views
0

このコードでは、オーバーレイを表示したい、.mg-show-info。 elInfoLinkのクリック機能は、計画どおりに動作します。今では親のクリック可能にする必要があります。既に別のイベントがあるので、ここで見ているように私はそれをやると思いました。親をクリックすると、その子の関数が呼び出され、console.logは機能しますが、オーバーレイは表示されません。 なぜですか?コードは部分的にしか実行されていません

var elInfoLink = tile.querySelector('.info-link'); 
if (elInfoLink) { 

    $(elInfoLink).parent().click(function (e) { 
     $(elInfoLink).click(); 
    }); 

    $(elInfoLink).click(function (e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    var mg = document.querySelector('#mg'); 
    mg.classList.add('mg-show-info'); 
    mg.dataset.memoryOverlayShowId = tile.dataset.id; 
    console.log("foo"); 
    }); 
} 
+1

コードブロック内の 'e.stopPropagation();'と何か関係があると思います。イベントの伝搬を停止し、親に到達しません。 –

+0

[jqueryのe.stopPropagation()がアンカータグで動作する可能性があります](http://stackoverflow.com/questions/8952176/does-e-stoppropagation-in-jquery-works-on-anchor-tag) –

+1

@SwashataGhosh彼は 'e.stopPropagation'を必要とします。削除された場合、あなたは 'parent - > child - > parent ... 'のイベントサイクルに入ります。 – Rajesh

答えて

0

EDIT:@Rory McCrossanが指摘したように、これはあなたの表記にかなり同等です。これは正常に動作します。

メソッド.click()は、要素にクリックイベントリスナーを登録するための略語です。あなたがしたいことは次のとおりです:

$(elInfoLink).parent().click(function (e) { 
    $(elInfoLink).trigger('click'); 
}); 
+0

これはOPが既に持っているものと論理的に同じです。 http://api.jquery.com/clickを参照してください: 'このメソッドは最初の2つのバリエーションの.on("クリック "ハンドラ)のショートカットで、.trigger(" click ")' –

+0

あなたは本当に正しいです、私の悪い! – SinDeus

0

これは「部分的な実行」がないようです。 クラスmg-show-infoが正しい要素に追加されている(そしてその要素が適切に選択されている)場合、関連するCSSがロードされているかどうかを再確認します。

関連する問題