2013-08-09 2 views
16

event.preventDefault()event.stopPropagation()の違いを教えてもらえますか?event.preventDefault対event.stopPropagation

私はテーブルを持っており、そのテーブルの中にimgタグがあります。

imgタグをクリックすると、ポップアップが表示されます。

しかし、私はまた、複数の行の選択を停止したいので、私が使用します。

$("table.items tbody tr").click(function(event) { 
     event.stopPropagation(); 
    }); 

私はjsのコードを使用すると、ポップアップが表示されません。

jsコードを削除すると、ポップアップが機能します。

$(".info").live("click",function(e){ 
    //console.log('ok'); 
    e.stopPropagation(); 
    var elem = $(this); 
    var id = $(this).attr("id").replace("image_","container_"); 
    $('#'+id).toggle(100, function() { 
     if($(this).css('display') == 'block') { 
      $.ajax({ 
       url: "$url", 
       data: { document_id:elem.attr('document_id') }, 
       success: function (data) { 
        $('#'+id).html(data); 
       } 
      }); 
      } 
     }); 
}); 

なぜですか?

+2

これはあなたに役立ちますhttp://davidwalsh.name/javascript-events – L10

+1

html構造を表示して、画像がテーブル構造との関係でわかるようにしてください。 – Huangism

+0

'click'で選択を止めるのは遅すぎます。 'mousedown'を使います。 – canon

答えて

35

私は、私の知る限りではJavascriptの専門家ではないですけど:

stopPropagationは、イベントがチェーンアップバブルのないことを確認するために使用されます。例えば。 <td>タグをクリックすると、親の<tr>のクリックイベントが発生し、その親の<table>などが表示されます。stopPropagationは、これが発生しないようにします。

preventDefaultは、要素の通常の動作を停止するために使用されます。リンク上のクリックハンドラ内のpreventDefaultは、リンクのフォローを停止するか、送信ボタンをクリックするとフォームが送信されなくなります。

+0

@CrisimIlNumenoreanoあなたのコメントは理にかなっていません。 sevenseacatの答えは私に100%正しいと思われ、[dup question]の回答で確認できます(http://stackoverflow.com/questions/5963669/whats-the-difference-between-event-stoppropagation-and-event- preventdefault)と[event.preventDefault()](http://api.jquery.com/event.preventdefault/)および[event.stopPropagation()](https://api.jquery)のjQueryドキュメントを参照してください。 com/event.stoppropagation /)。 – Trisped

+0

stopPropagationもキャプチャフェーズを停止しますか? –

+0

私はこれらの2つの関数( 'stopImmediatePropagation'を数えれば3つ)の周りの混乱は、伝播の停止が自動的にデフォルトを防ぐのかどうかについては疑問です。それはそうかもしれないようです。 – doug65536

6

イベントpreventDefault From W3C:

event.preventDefault()メソッドが起こってから 要素のデフォルト動作を停止させます。たとえば :

防止URL

イベントstopPropagation From W3C次の形式が からリンクを防ぐ提出から送信ボタンを:

するevent.stopPropagation()メソッドは、のバブリングを停止親イベントハンドラが から実行されないように、 親エレメントへのイベント。

7
  • stopPropagation子の子にイベントを停止しますが、それだろう(全体の祖先)
  • preventDefaultに起きてからそのイベントを停止します 親の(および先祖も)

あなたのコードは親ですか?それは子供ですか?imgは子供ですtrは親です(正直に言うとおじいちゃんです)。stopPropagationコードはどこにあるのでしょうか。

+0

これは間違っているという印象を受けます。私はstopPropagationが子供の行動を止めないと思いますか? – user1884155

+0

あなたはおそらくpreventDefaultについて話していますが、私のコメントはstopPropagationの説明を目指していました。ユーザーrpsは自分のコメント後に彼の答えを訂正しました。 – user1884155

+0

@Trisped、 @ user1884155あなたが言っている例は 'preventDefault'のようです。 そして、私は最初に 'stopPropagation'が子供の出来事を止めると言っている間違いをしました。後で@ user1884155で修正されました。 – rps