Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Событие на :after (https://javascript.ru/forum/dom-window/27646-sobytie-na-after.html)

Gesandte 20.04.2012 11:03

Событие на :after
 
Добрый день.
Собственно и весь вопрос, можно как то повесить событие на данный селектор или нет?

melky 20.04.2012 12:39

Цитата:

Сообщение от Gesandte (Сообщение 170051)
Добрый день.
Собственно и весь вопрос, можно как то повесить событие на данный селектор или нет?

а это элемент? это псевдо-элемент.

но давайте попробуем с помощью делегирования :
<style>
div {
    color: green;
    border: 1px green dashed;
    position: absolute;
}
div:after {
    content: "Ы";
    width: 100px;
    height: 100px;
    border: 2px gray solid;
    padding: 5px;
    font-size: 20px;
    position: absolute;
    top: 30px;
    left: 30px;
}
</style>
<div>дивчег</div>
<script>
document.body.addEventListener('click', function(e){
    alert( "clicked on : "+e.target.tagName );
}, false);
</script>


нет, нельзя.

Gesandte 20.04.2012 13:25

спасибо за ответ)
а, жаль...счастье было так близко...придеться придумывать другой способ реализации.

Sigizmund2012 18.06.2015 15:47

chernozor,
Через Гугл Оповещения эту тему нашёл?

chernozor 19.06.2015 15:24

Цитата:

Сообщение от Sigizmund2012 (Сообщение 375634)
chernozor,
Через Гугл Оповещения эту тему нашёл?

через строку поиска нашёл "как повесить событие на псевдо элемент"

Sigizmund2012 19.06.2015 16:50

chernozor,
Ясно, я думал ты автор этого говноблога. Просто есть такая "шибко вумная" техника: пишется статья, потом через Гугл Оповещения отслеживаются темы на форумах со схожими названиями, где автор срёт ссылками на свой блог. Но ты ведь не такой, правда?

chernozor 23.06.2015 15:41

Спасибо за ваш комментарий
 
Да, действительно, я написал эту статью, потому что не нашёл ответа в рунете на данный ответ.
Единственное что выдал поисковик - этот пост на этом форуме, ответа на который до сих пор нет.
Я всего лишь предложил свой вариант решения этой задачи, который действительно работает.
Или у вас, дорогой друг, есть претензии к коду?
Об остальных ваших мыслях, я прошу оградить нас.
Спасибо.

MallSerg 23.06.2015 16:05

Цитата:

Сообщение от chernozor
Я всего лишь предложил свой вариант решения этой задачи, который действительно работает.

Это лож (пиздишь). На пальцах ты не предложил тут решения ты просто вставил рекламную ссылку.

Цитата:

Сообщение от chernozor
есть претензии к коду?

Какому коду?

в теории теперь элементарно решается через css pointerevent

chernozor 23.06.2015 16:21

Я и предложил pointer-events который и описал в своей заметке
 
Используем свойство pointer-events
На элемент, в котором находится искомый псевдоэлемент, вешаем свойство pointer-events: none, а на сам псевдоэлемент pointer-events: all.
Это не ложЬ(мягкий знак).
Тема висит 3 года, никто не удосужился ответить человеку на вопрос.

ksa 23.06.2015 16:28

Цитата:

Сообщение от chernozor
Используем свойство pointer-events
На элемент, в котором находится искомый псевдоэлемент, вешаем свойство pointer-events: none, а на сам псевдоэлемент pointer-events: all.

Меньше слов... :) Достаточно одного тестового примера, который можно выложить прямо тут. ;)

ksa 23.06.2015 16:32

Цитата:

Сообщение от chernozor
Тема висит 3 года, никто не удосужился ответить человеку на вопрос.

А ты специально зарегился тут, дабы убрать завесу незнания? :D

P.S.
Жду тестовый пример, тут. Не по какой-то ссылке на сторонний ресурс... :no:

ruslan_mart 23.06.2015 17:09

Вот вам тестовый пример без jQuery. :)

<!doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Документ без названия</title>
		<style type="text/css">
			.test {
				pointer-events: none;
			}
			.test::after {
				background: red;
				content: '';
				display: block;
				height: 100px;
				pointer-events: all;
				width: 100px;
			}
		</style>
	</head>

	<body>
		<div class="test">Hello world!</div>
	
		<script type="text/javascript">
			document.querySelector('.test').onclick = function() {
				alert('Hello world!');
			};
		</script>
	</body>
</html>

рони 23.06.2015 17:20

:write: на всякий для ie < 9 пролетает.
https://developer.mozilla.org/en-US/...pointer-events

ruslan_mart 23.06.2015 17:43

рони, неужели ими ещё кто-то пользуется? :blink:

ksa 24.06.2015 08:31

Цитата:

Сообщение от Ruslan_xDD
Вот вам тестовый пример без jQuery.

Не совсем понял в чем тут смысл... Ты вешаешь событие на элемент, а не на псевдоэлемент. И в обработчике тот элемент получаешь...
Т.ч. пока ничего нового.

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
.test {
	pointer-events: none;
}
.test::after {
	background: red;
	content: '';
	display: block;
	height: 100px;
	pointer-events: all;
	width: 100px;
}
</style>
<script type='text/javascript'>
</script>
</head>
<body>
<div class="test">Hello world!</div>
<script type="text/javascript">
	document.querySelector('.test').onclick = function(e) {
		alert(e.target.tagName);
	};
</script>
</body>
</html>

ksa 24.06.2015 08:33

Аналогичный пример уже был продемонстрирован в самом начале.
http://javascript.ru/forum/dom-windo...tml#post170061
Там же и дан ответ на вопрос темы.

Пока никаких опровергающих примеров я не видел. :no:

ruslan_mart 24.06.2015 14:50

ksa, ну больше никак не получится сделать, только так.

devote 24.06.2015 15:09

Цитата:

Сообщение от ksa
Ты вешаешь событие на элемент, а не на псевдоэлемент.

Согласен, при этом лишается возможность прослушивать события у основного элемента (что не есть гуд).

Увы и ах, но pointer-events не является решением.

PS. Ссыль я удалил.

Deff 25.06.2015 01:30

Цитата:

Сообщение от Gesandte
Собственно и весь вопрос, можно как то повесить событие на данный селектор или нет?

По идее, расчет позиции эл-та(и курсора) и отслеживание события на области
Внештатные решения типично требуют кода больше, чем дополнения через скрипт новых элементов, покрывающих нужные старые.

Endy 28.06.2015 15:54

так можно,только тут не определишь был ли это клик по :before или :after
<style>
    div {
        color: green;
        border: 1px green dashed;
        position: absolute;
    }
    div:after {
        content:"Ы";
        width: 100px;
        height: 100px;
        border: 2px gray solid;
        padding: 5px;
        font-size: 20px;
        position: absolute;
        top: 30px;
        left: 30px;
    }
</style>
<div id="divcheg">дивчег</div>
<script>
    divcheg.onclick = function(e) {
        if ((e.offsetX > this.offsetWidth) || (e.offsetY > this.offsetHeight)) {
            alert(e.type + ' on pseudo element');
        } else {
            alert(e.type + ' on ' + e.target.tagName)
        }
    };
</script>

Deff 28.06.2015 21:33

Endy,
дык спозиционируй псевдо точно над :after
По идее все параметры размера и положения можно считать из computedStyle

ksa 29.06.2015 08:32

Цитата:

Сообщение от Endy
так можно

Мыло-мочало...

Напоминаю вопрос темы
Цитата:

Сообщение от Gesandte
Событие на :after
можно как то повесить событие на данный селектор или нет?

И ответ каждого подтверждает первый ответ автору - нет.


Часовой пояс GMT +3, время: 16:37.