2012-10-02 14 views
11

Zastanawiam się, jak włączyć kliknięcie na pseudoelementu :before (pomarańczowa część elementu div na łączu JSfiddle I poniżej). Czytałem, że ponieważ pseudoelementy nie znajdują się w DOM, potrzebujesz do tego hackowania. Niestety, nie mogę znaleźć istniejącego Stackoverflow Q & A, który faktycznie pokazuje działający kod.Użyj javascript, aby kliknąć pseudoelement?

Link: http://jsfiddle.net/Vv6Eb/4/

HTML:

<div></div> 

CSS:

div { position:relative; background-color:#333; 
     padding:20px; margin:20px; float:left; 
} 

div:before { content:""; display:block; 
    padding:5px; background-color:#f60; border:2px solid white; 
    position: absolute; top:-2px; right:-2px; border-bottom-left-radius: 10px; 
} 
+2

Może może zawierać więcej informacji na temat tego, co chcesz zrobić? Możliwe jest inne obejście, aby osiągnąć zamierzony rezultat. –

+1

Nie można powiązać bezpośrednio z pseudoelementem, ale można powiązać go z elementem, który go tworzy, a kliknięcie pseudoelementu zawsze wywoła zdarzenie powiązane z elementem generującym. Jeśli konkretnie musisz związać tylko część pomarańczową, musisz utworzyć nowy element. – BoltClock

+0

@JamesMontagne, wszystko, co mnie interesuje, to możliwość kliknięcia na pseudoelement, tak jak kliknięcie na '' lub '

Odpowiedz

8

Rozwiązaniem tego byłoby dynamicznie dołączyć <span> do elementu i przypisanie metody kliknij, aby ją. Like this fiddle.

var item = $('<span />'); 
item.click(function() { alert('click'); }); 
$('div').append(item); 

CSS

div { position:relative; background-color:#333; 
     padding:20px; margin:20px; float:left; 
} 

div span { content:""; display:block; 
    padding:5px; background-color:#f60; border:2px solid white; 
    position: absolute; top:-2px; right:-2px; border-bottom-left-radius: 10px; 
} 
+0

- @ ComputerArts, niesamowite dzięki, to wszystko, proste! –

2

wiem, że próbują wykorzystać: przed, ale w tej sytuacji, nie można po prostu stworzyć nowy div z klasą do użycia jako hak i dołączenie go do oryginalnej div?

Coś jak to może działać:

var newDiv = $("<div class='orangeCircle'>"); 
$(".parentDivToOrangeCircle").append(newDiv); 

I CSS:

.parentDivToOrangeCircle { position:relative; background-color:#333; 
    padding:20px; margin:20px; float:left; 
} 

.orangeCircle { 
    padding:5px; background-color:#f60; border:2px solid white; 
    position: absolute; top:-2px; right:-2px; border-bottom-left-radius: 10px; 
} 
+0

- @ Jordan, nie muszę używać: wcześniej. Jeśli istnieje jakikolwiek inny sposób, bardzo bym się cieszył, aby zobaczyć, jak będzie wyglądał kod. –

16

Jeśli wiesz, gdzie krąg "powinno" być, można użyć trygonometrii aby sprawdzić, czy kliknięcie jest w kręgu: http://jsfiddle.net/Vv6Eb/19/

$("div").click(function(e){ 
    var $me = $(this), 
     width = $me.outerWidth(), 
     height = $me.outerHeight(), 
     top = $me.position().top, 
     left = $me.position().left; 

    var len = Math.sqrt(Math.pow(width - e.offsetX, 2) + Math.pow(e.offsetY, 2)); 

    if (len < 10) 
     alert('ding'); 
});​ 
+1

oh, to jest fajne! –

+0

świetne pojęcie. –

+0

nie używaj pow do obliczania kwadratu, użyj '*' –

Powiązane problemy