Pytanie, jak wykryć kliknięcie w dowolnym miejscu, z wyjątkiem określonego elementu odpowiedział kilka elementów takich jak tutaj:

Wydarzenie na kliknięciu wszędzie na stronie poza określoną div

Problem, który mam, próbuje dowiedzieć się, jak wykryć kliknięcie w dowolnym miejscu z wyjątkiem danego elementu, w tym jednego z nich.

Na przykład w tym kodzie:

http://jsfiddle.net/k5cem/

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script>
$(function() {

$(document).click(function(e) {
   $('#somediv').hide();
});
$('#somediv').click(function(e) {
   e.stopPropagation();
});

});
</script>

<div style="border: 1px solid red; width:100px; height: 100px" id="somediv">

    <span style="display: block; border: 1px solid green; width:50px; height: 50px; margin: 0 auto" id="someSpan"></span>

</div>

Kliknięcie w dowolnym miejscu poza czerwonym div powinien spowodować, że się ukryje. Nie tylko to, ale także kliknięcie jej elementu dziecka (zielony span) powinien spowodować ukrywanie. Jedynym czasem nie powinien się ukryć, to po kliknięciu, ale nie na rozpiętości. Gdy stoi teraz, kliknięcie w rozpiętości jest również uważany za kliknięcie Dive Div Dlatego nie ukrywa div, jeśli zostanie kliknięty.

Jak to osiągnąć?

3
TKpop 14 grudzień 2011, 05:51

2 odpowiedzi

Najlepsza odpowiedź

Możesz porównać cel kliknięcia do danego elementu:

$(document).click(function(e) {
    if (e.target != $('#somediv')[0]) {
        $('#somediv').hide();
    }
});

demo: http://jsfiddle.net/k5cem/7/

7
Blender 14 grudzień 2011, 02:02

Dodaj:

$('#somediv').click(function(e) {
    e.stopPropagation();
}).children().click(function(e) {
    $('#somediv').hide();
});

Oto zaktualizowany interesujący skrzypce: http://jsfiddle.net/k5cem/5/

1
Terry 14 grudzień 2011, 01:54