Cum de a opri eveniment barbotare de pe caseta de selectare clic

voturi
149

Am o casetă de selectare pe care vreau să efectueze o acțiune Ajax cu privire la eveniment clic, cu toate acestea, caseta este, de asemenea, în interiorul unui recipient cu propriul comportament clic pe care nu vreau să ruleze atunci când caseta se face clic. Această probă ilustrează ceea ce vreau să fac:

<html lang=en>
    <head>
        <title>Test</title>
        <script type=text/javascript src=http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js></script>
        <script type=text/javascript>
        $(document).ready(function() {
            $('#container').addClass('hidden');
            $('#header').click(function() {
                if($('#container').hasClass('hidden')) {
                    $('#container').removeClass('hidden');
                } else {
                    $('#container').addClass('hidden');
                }
            });
            $('#header input[type=checkbox]').click(function(event) {
                // Do something
            });
        });
        </script>
        <style type=text/css>
        #container.hidden #body {
            display:none;
        }
        </style>
    </head>
    <body>
        <div id=container>
            <div id=header>
                <h1>Title</h1>
                <input type=checkbox name=test />
            </div>
            <div id=body>
                <p>Some content</p>
            </div>
        </div>
    </body>
</html>

Cu toate acestea, eu nu pot da seama cum să oprească evenimentul barbotarea fără a provoca comportamentul implicit clic (caseta de selectare a deveni verificate / debifată) nu pentru a rula.

Ambele următoarele opri evenimentul barbotare, dar, de asemenea, nu se schimba starea caseta de selectare:

event.preventDefault();
return false;
Întrebat 22/07/2009 la 10:55
sursa de către utilizator
În alte limbi...                            


8 răspunsuri

voturi
30

Utilizați metoda stopPropagation:

event.stopPropagation();
Publicat 22/07/2009 la 11:06
sursa de către utilizator

voturi
272

a inlocui

event.preventDefault();
return false;

cu

event.stopPropagation();

event.stopPropagation ()

Oprește barbotarea unui eveniment la elemente mamă, împiedicând orice manipulare-mamă de la primirea notificării evenimentului.

event.preventDefault ()

Previne browser-ul de la executarea acțiunea implicită. Utilizați metoda isDefaultPrevented pentru a ști dacă această metodă a fost numit vreodată (pe acel obiect eveniment).

Publicat 22/07/2009 la 11:06
sursa de către utilizator

voturi
5

După cum au menționat alții, încercați stopPropagation().

Și există un al doilea handler pentru a încerca: event.cancelBubble = true;Este un handler specific IE, dar este susținută în cel puțin FF. Nu știu într - adevăr mult despre ea, așa cum nu l - am folosit -o eu, dar ar putea fi în valoare de o lovitură, dacă toate celelalte eșuează.

Publicat 22/07/2009 la 11:12
sursa de către utilizator

voturi
25

Nu uita IE:

if (event.stopPropagation) {    // standard
        event.stopPropagation();
    } else {    // IE6-8
        event.cancelBubble = true;
}
Publicat 16/12/2012 la 10:50
sursa de către utilizator

voturi
4

Acesta este un exemplu excelent pentru a înțelege conceptul evenimentului barbotare. Pe baza răspunsurilor de mai sus, codul final va arăta așa cum este menționat mai jos. În cazul în care utilizatorul face clic pe caseta de selectare propagarea evenimentului a „antetul“ elementul părinte va fi oprit cu ajutorul event.stopPropagation();.

$(document).ready(function() {
            $('#container').addClass('hidden');
            $('#header').click(function() {
                if($('#container').hasClass('hidden')) {
                    $('#container').removeClass('hidden');
                } else {
                    $('#container').addClass('hidden');
                }
            });
          $('#header input[type=checkbox]').click(function(event) {
              if (event.stopPropagation) {    // standard
                   event.stopPropagation();
               } else {    // IE6-8
                    event.cancelBubble = true;
               }
          });     
  });
Publicat 27/07/2015 la 10:13
sursa de către utilizator

voturi
5

Când utilizați jQuery nu aveți nevoie pentru a apela o funcție de oprire separat ..

Puteti doar return falseîn tratare a evenimentelor

Acest lucru se va opri și anula evenimentul barbotare ..

De asemenea, a se vedea:

event.preventDefault () vs return false

Din docs jQuery:

Aceste stivuitoare, prin urmare, poate împiedica handler delegat de la declanșarea prin apelarea event.stopPropagation () sau returnarea false.

Publicat 17/08/2015 la 10:36
sursa de către utilizator

voturi
0

Credit pentru @mehras pentru codul. Tocmai am creat un fragment pentru a demonstra că am crezut că ar fi apreciat și am vrut o scuză pentru a încerca această caracteristică.

$(document).ready(function() {
            $('#container').addClass('hidden');
            $('#header').click(function() {
                if($('#container').hasClass('hidden')) {
                    $('#container').removeClass('hidden');
                } else {
                    $('#container').addClass('hidden');
                }
            });
          $('#header input[type=checkbox]').click(function(event) {
              if (event.stopPropagation) {    // standard
                   event.stopPropagation();
               } else {    // IE6-8
                    event.cancelBubble = true;
               }
          });     
  });
div {
  text-align: center;
  padding: 2em;
  font-size:1.2em
}
.hidden {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="header"><input type="checkbox"/>Checkbox won't bubble the event,
 but this text will.</div>
<div id="container">click() bubbled up!</div>

Publicat 19/04/2017 la 20:39
sursa de către utilizator

voturi
-1

În angularjs acest lucru ar trebui lucrări:

event.preventDefault(); 
event.stopPropagation();
Publicat 22/05/2017 la 09:08
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more