2013-08-09 9 views
16

क्या कोई बता सकता है कि event.preventDefault() और event.stopPropagation() के बीच क्या अंतर है?event.preventDefault बनाम event.stopPropagation

मेरे पास एक टेबल है और उस तालिका में मेरे पास एक आईएमजी टैग है।

जब मैं आईएमजी टैग पर क्लिक करता हूं, तो मैं एक पॉपअप देखना चाहता हूं।

लेकिन मैं यह भी एकाधिक पंक्तियों के चयन को रोकना चाहते हैं, तो मैं का उपयोग करें:

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

जब मैं जे एस कोड का उपयोग, पॉपअप प्रकट नहीं होता है;

यदि मैं जेएस कोड हटा देता हूं, तो पॉपअप काम करता है।

$(".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

कृपया अपनी एचटीएमएल संरचना दिखाएं ताकि हम जानते हैं कि छवि तालिका संरचना – Huangism

+0

के संबंध में कहां है, 'क्लिक' पर चयन को रोकने में बहुत देर हो चुकी है; 'mousedown' का उपयोग करें। – canon

उत्तर

35

मैं एक जावास्क्रिप्ट विशेषज्ञ नहीं हूँ लेकिन जहां तक ​​मुझे पता है:

stopPropagation यकीन है कि घटना करता बबल सामने श्रृंखला नहीं बनाने के लिए प्रयोग किया जाता है। जैसे। <td> टैग पर एक क्लिक भी इसके माता-पिता <tr> पर ईवेंट पर क्लिक करेगा, और उसके बाद उसके माता-पिता <table>, आदि stopPropagation इसे होने से रोकता है।

preventDefault किसी तत्व की सामान्य क्रिया को रोकने के लिए उपयोग किया जाता है, उदाहरण के लिए। एक लिंक पर एक क्लिक हैंडलर में preventDefault लिंक का पालन करने से रोक देगा, या सबमिट बटन पर फॉर्म सबमिट किए जाने से रोक देगा।

+0

@CrisimIlNumenoreano आपकी टिप्पणी का कोई मतलब नहीं है। सातseacat का जवाब मेरे लिए 100% सही दिखता है और [डुप्लिकेट सवाल] पर उत्तर के साथ चेक किया जा सकता है (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

रोकता हैप्रॉपैगेशन कैप्चर चरण को भी रोकता है? –

+0

मुझे लगता है कि इन दो कार्यों के आसपास भ्रम (तीन यदि आप 'स्टॉपइमीडिएटप्रोपैगेशन' की गणना करते हैं तो तीनों में संदेह है कि प्रसार रोकना स्वचालित रूप से डिफ़ॉल्ट को रोकता है या नहीं। ऐसा लगता है जैसे यह हो सकता है। – doug65536

6

घटना preventDefault From W3C:

event.preventDefault() विधि एक तत्व के डिफ़ॉल्ट कार्रवाई होने से रोकता है। उदाहरण के लिए:

रोकें एक एक फार्म यूआरएल निम्न से एक लिंक को रोकने के प्रस्तुत करने से सबमिट बटन

घटना stopPropagation From W3C:

event.stopPropagation() विधि के उत्साह से भरा हुआ बंद हो जाता है अभिभावक तत्वों के लिए एक ईवेंट, किसी भी पेरेंट इवेंट हैंडलर को निष्पादित होने से रोकता है।

7
  • एक बच्चे पर stopPropagation एक बच्चे पर माता पिता (पूरे पूर्वजों)
  • preventDefault पर ऐसा होने से घटना बंद हो जाएगा बच्चे पर घटना बंद हो जाएगा, लेकिन यह पेरेंट (और पूर्वजों भी!)
पर होगा

अब आपके कोड में माता-पिता है? बच्चा कौन सा है?img बच्चा tr माता-पिता (ईमानदार होने के लिए अच्छी तरह से दादाजी) है, तो अनुमान लगाएं कि stopPropagation कोड होना चाहिए।

+0

मुझे लगता है कि यह गलत है। मुझे लगता है कि रोकथाम बच्चे के होने से होने वाली कार्रवाई को रोक नहीं सकता है? – user1884155

+0

आप शायद StopDefault के बारे में बात कर रहे हैं, लेकिन मेरी टिप्पणी स्टॉपप्रॉपैगेशन स्पष्टीकरण के उद्देश्य से थी। उपयोगकर्ता आरपीएस ने मेरी टिप्पणी के बाद अपना जवाब सही कर दिया है। – user1884155

+0

@ ट्रिस्पीड, @ user1884155 सही है, उदाहरण है कि आप जो कह रहे हैं वह 'preventDefault' है। और शुरुआत में मैंने यह कहने की गलती की कि 'स्टॉपप्रोपैगेशन' किसी भी बच्चे की घटनाओं को भी रोक देगा जिसे बाद में @ user1884155 द्वारा सही किया गया था। – rps

संबंधित मुद्दे