2017-10-26 4 views
1

OK、そう、私のコード:のjQuery

HTML:#pictureはjQueryのhtmlの()で追加された内部にあるので、私は上で必要なもの

<div id ="close"></div> 
<div id="mask"> 
    <div id="picture"> 
    <div id="prev"></div> 
    <img src="" /> 
    <div id="next"></div> 
    </div> 
</div> 

すべて( )(delegate)この要素にいくつかの関数を追加します。

のjQuery:

$('#close, #mask').on("click", function(){ 
    closeImg(); 
}); 

$('#picture').on("click", '#prevImg', function(){ 
    prevImg(); 
}); 

$('#fixed').on("click", '#nextImg', function(){ 
    nextImg(); 
}); 

#nextImg /#prevImgに私をクリックすると、関数closeImg()があまりにも呼ばれていました。そして、私はそれを失うことはありません。 #nextImg /#prevImgからハンドラcloseImg()を削除するにはどうすればよいですか?nextImg()/ prevImg()を呼び出しますか?私は、私はオフ()を使うべきだと思いますが、私はそれを理解していないし、似たような例は見つけられません。そして私の全努力は失敗しました。

答えて

1

previousnextの機能では、event.stopPropagation()を使用して、クリックイベントをその親に伝達しないようにする必要があります。

$("#picture").on("click", "#prevImg", function(e){ 
    e.stopPropagation(); 
    prevImg(); 
}); 

$("#picture").on("click", "#nextImg", function(e){ 
    e.stopPropagation(); 
    nextImg(); 
}); 
+0

イベントハンドラが委任されているので、これはうまくいきません。これは、イベントが既に捕捉されるためにDOMをバブリングしたことを意味します。ここで 'stopPropagation()'を呼び出すことはできません。私は同じ間違いを作った: –

+0

@Phaniクマールそれは働く、どうもありがとう。私はstopPropagation()について考えましたが、間違った方法で使用しました。 – Eva

+0

私はRory McCrossanと似ていると思っていました。正直言って、私はそれがうまくいくのは驚きです。私はそれを慎重に分析する必要があります。しかし、それは動作します:-) – Eva

関連する問題