Chcę wykluczyć kliknięcie nawet wtedy, gdy użytkownik kliknąć na .Special, ale nie wydaje się działać?

<body>
    <p>normal</p>
    <p>normal</p>
    <p>normal</p>
    <p>normal</p>
    <p>normal</p>
    <p class="special">special</p>
    <p>normal</p>
    <p>normal</p>
</body>

Mój Js.

    $("body:not(.special)").click(function () {
        alert('test');
    });

http://jsfiddle.net/vv9l1eog/1/

0
user3522755 15 sierpień 2014, 14:12

6 odpowiedzi

Najlepsza odpowiedź

Musisz zastosować filtr ":not" za pomocą p nie z korpusem.

$("body p:not(.special)").click(function () {
    alert('test');
});

EDYTUJ:

Aby kliknąć wszędzie na stronie

$("body").click(function () {
                alert('test');
            }).find(".special").click(function(){return false;});

Skrzypce Oto

3
Ranjit Singh 15 sierpień 2014, 10:25

Przestrzeń między body a :not. Oznacza to, że wybiera jego następców.

$("body :not(.special)").click(function () {
    alert('test');
});

Jsfiddle: http://jsfiddle.net/vv9l1EOG/2/

Aktualizacja : Alert na całej stronie z wyjątkiem specjalnej domy

Musisz powiązać się na html zamiast body, gdy masz na myśli całą stronę .

$("html").click(function (e) {
    if (!$(e.target).is('.special')) {
        console.log(e.target);
        alert('test');
     }
});

Poza tym tag <p> jest a Element na poziomie bloku. Special Dom w twoim przykładzie jest cały wiersz na stronie.

Jeśli chcesz wyłączyć tylko kliknięcie na specjalne tekst , owinąć tekst do Element inline. Tak jak:

<body>
    <p>normal</p>
    <p>normal</p>
    <p>normal</p>
    <p>normal</p>
    <p>normal</p>
    <p><span class="special">special</span></p>
    <p>normal</p>
    <p>normal</p>
</body>

Zaktualizowano skrzypce: http://jsfiddle.net/vv9l1eog/7/

3
Junle Li 15 sierpień 2014, 11:18

Co powiesz na to:

$('html').click(function(e) {
    if (! $(e.target).is('.special') ) {
        alert('test');
    }
});

Spowoduje to poprosić o alert po kliknięciu w dowolnym miejscu na stronie.

2
Setrákus Ra 15 sierpień 2014, 10:32

Selektory są nieco na zewnątrz,

Próbować:

$("body :not(.special)").click(function () {
    alert('test');
});
0
SMacFadyen 15 sierpień 2014, 10:14

To działa dla mnie, http://jsfiddle.net/3q0klr5w/1/

        $("body").children().not('.special').click(function () {
            alert('test');
        });

Lub nawet $ ("ciało *: nie (.Special)"). Kliknij (funkcja () {alert ("test");});

0
Jhecht 15 sierpień 2014, 10:16

Lepiej byłoby wyłączyć dołączenie pojedynczego kliknięcia do ciała i przetestuj event.target, aby sprawdzić, czy jest .special, czy nie:

$('body').on('click', function(e) {
    if (! $( e.target ).is('.special') ) {
         alert( 'test' );
    }
});

Oto skrzypce

0
billyonecan 15 sierpień 2014, 10:22