Πώς να σταματήσει εκδήλωση φυσαλίδων στο κουτάκι κλικ

ψήφοι
149

Έχω ένα κουτάκι που θέλω να εκτελέσει κάποια ενέργεια Ajax στο συμβάν κλικ, ωστόσο το πλαίσιο ελέγχου είναι επίσης μέσα σε ένα δοχείο με τη δική του συμπεριφορά κλικ που δεν θέλω να τρέχει όταν το πλαίσιο ελέγχου είναι κλικ. Αυτό το δείγμα δείχνει ό, τι θέλω να κάνω:

<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>

Ωστόσο, δεν μπορώ να καταλάβω πώς να σταματήσει την εκδήλωση βράζει χωρίς να προκαλεί την προεπιλεγμένη συμπεριφορά κλικ (κουτάκι να γίνει έλεγχος / επιλεγμένο) να μην τρέξει.

Και τα δύο από τα ακόλουθα σταματήσει η εκδήλωση ανάδευση αλλά δεν αλλάζουν την κατάσταση κουτάκι:

event.preventDefault();
return false;
Δημοσιεύθηκε 22/07/2009 στις 10:55
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
30

Χρησιμοποιήστε τη μέθοδο stopPropagation:

event.stopPropagation();
Απαντήθηκε 22/07/2009 στις 11:06
πηγή χρήστη

ψήφοι
272

αντικαθιστώ

event.preventDefault();
return false;

με

event.stopPropagation();

event.stopPropagation ()

Σταματά την διαβίβαση ενός γεγονότος στη μητρική στοιχείων, αποτρέποντας τυχόν μητρικής φορτωτές από την κοινοποίηση της εκδήλωσης.

event.preventDefault ()

Αποτρέπει το πρόγραμμα περιήγησης από την εκτέλεση της προεπιλεγμένης ενέργειας. Χρησιμοποιήστε τη μέθοδο isDefaultPrevented να γνωρίζει αν η μέθοδος αυτή ονομάζεται ποτέ (για αυτό το αντικείμενο εκδήλωσης).

Απαντήθηκε 22/07/2009 στις 11:06
πηγή χρήστη

ψήφοι
5

Όπως άλλοι έχουν αναφερθεί, δοκιμάστε stopPropagation().

Και υπάρχει ένα δεύτερο χειριστή να δοκιμάσετε: event.cancelBubble = true;Είναι ένας συγκεκριμένος χειριστής IE, αλλά στηρίζεται σε τουλάχιστον FF. Πραγματικά, δεν ξέρω πολλά γι 'αυτό, όπως δεν έχω χρησιμοποιήσει τον εαυτό μου, αλλά ίσως να αξίζει έναν πυροβολισμό, αν όλα τα άλλα αποτύχουν.

Απαντήθηκε 22/07/2009 στις 11:12
πηγή χρήστη

ψήφοι
25

Μην ξεχνάτε IE:

if (event.stopPropagation) {    // standard
        event.stopPropagation();
    } else {    // IE6-8
        event.cancelBubble = true;
}
Απαντήθηκε 16/12/2012 στις 10:50
πηγή χρήστη

ψήφοι
4

Αυτό είναι ένα εξαιρετικό παράδειγμα για την κατανόηση εκδήλωση φυσαλίδες έννοια. Με βάση τις παραπάνω απαντήσεις, ο τελικός κώδικας θα μοιάζουν όπως αναφέρεται παρακάτω. Όταν ο χρήστης κάνει κλικ στο πλαίσιο ελέγχου της εξάπλωσης της εκδήλωσης για να «επικεφαλίδα» γονικό στοιχείο του θα πρέπει να σταματήσει τη χρήση 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;
               }
          });     
  });
Απαντήθηκε 27/07/2015 στις 10:13
πηγή χρήστη

ψήφοι
5

Κατά τη χρήση jQuery δεν χρειάζεται να καλέσετε μια συνάρτηση στάση διαχωρισμό ..

Μπορείτε απλά return falseστο πρόγραμμα χειρισμού συμβάντων

Αυτό θα σταματήσει την εκδήλωση και να ακυρώσει φυσαλίδες ..

Δείτε επίσης:

event.preventDefault () έναντι return false

Από τα έγγραφα jQuery:

Αυτές οι χειριστές, ως εκ τούτου, μπορεί να εμποδίσει την κατ 'εξουσιοδότηση χειρισμού από την ενεργοποίηση καλώντας event.stopPropagation () ή την επιστροφή ψευδείς.

Απαντήθηκε 17/08/2015 στις 10:36
πηγή χρήστη

ψήφοι
0

Οι πιστώσεις προς @mehras για τον κωδικό. Μόλις δημιούργησα ένα απόσπασμα για να το αποδείξει, γιατί σκέφτηκα ότι θα εκτιμηθεί και θα ήθελα μια δικαιολογία για να δοκιμάσετε αυτό το χαρακτηριστικό.

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

Απαντήθηκε 19/04/2017 στις 20:39
πηγή χρήστη

ψήφοι
-1

Σε angularjs αυτό θα πρέπει τα έργα:

event.preventDefault(); 
event.stopPropagation();
Απαντήθηκε 22/05/2017 στις 09:08
πηγή χρήστη

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