• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Przycisk "Wyświetl numer"

Object Storage Arubacloud
0 głosów
165 wizyt
pytanie zadane 6 lipca 2020 w HTML i CSS przez Hardwell Dyskutant (8,980 p.)
zamknięte 9 lipca 2020 przez Hardwell

Witam, szukałem w necie i nie znalazłem, a siedzę nad tym od 2 godzin, ktoś wie w jaki sposób zrobić taki przycisk jak poniżej? (Numer jest schowany, pokazuje się kiedy klikniemy w przycisk)

przed:

po:

komentarz zamknięcia: Comandeer rozwiązał, dzień jak co dzień :D

2 odpowiedzi

0 głosów
odpowiedź 6 lipca 2020 przez Comandeer Guru (602,330 p.)
wybrane 7 lipca 2020 przez Hardwell
 
Najlepsza

W najprostszej postaci byłby to przycisk, który po kliknięciu zmienia swoją zawartość, czyli addEventListener + podmiana textContent/innerHTML na nową treść.

komentarz 6 lipca 2020 przez Comandeer Guru (602,330 p.)

Coś takiego: https://jsfiddle.net/Comandeer/b3kg9ro2/

Od razu podmieniłem przycisk na link do dzwonienia.

Żeby zrobić pełne wsparcie dla czytników ekranowych warto dorobić jeszcze obsługę klawiatury dla stanu "Pokaż numer" (bo przyciski powinny reagować też na spację, nie tylko enter).

komentarz 6 lipca 2020 przez Hardwell Dyskutant (8,980 p.)
Jak kod wyglądałby w jquery?
komentarz 6 lipca 2020 przez Comandeer Guru (602,330 p.)
  • document.querySelector → $
  • addEventListener → one
  • zmiana własności href i role → prop
  • textContent → text
komentarz 7 lipca 2020 przez Hardwell Dyskutant (8,980 p.)

@Comandeer może od razu tutaj napiszę, żeby tematu nowego nie robić, mam problem z tym, a mianowicie:
 

Mam stronę, szablon kupiony jakiś czas temu, (superstoryfinder), i chcę, aby wyświetlał mi się taki właśnie przycisk, już tłumaczę w czym problem, kiedy wyszukuję jakiś sklep, lista wygląda następująco:

 

w html do wyświetlania tej listy mam zrobione 

<ol style="display: block; " id="list"></ol>

w JS jest tak:

$("<li id='l_"+marker['__gm_id']+"' class='clinic_list'>")
	.html("<span class='number'>"+number+"</span><div><strong>"+v.name+"</strong><br /><span>"+v.address+"</span><div id='numb_phone' style='width: 130px; line-height: 20px; float: right;'><a href='www.google.pl'>Pokaż numer</a></div><div id=d_"+number+" class='distance'><span>"+distancenode+"</span> <span class='units'></span> <span class='time2'></span></div></div><div class='products'>"+ctype+"</div><a id='la_"+marker['__gm_id']+"' name='la_"+marker['__gm_id']+"'></a>")
	.click(function(){
		//displayPoint(marker, i);
		infowindow.setContent(info_window_string);
		infowindow.open(map,marker);
		toggleBounce(marker);
		var currentLatLng = new google.maps.LatLng(v.lat,v.lng);
		map.setCenter(currentLatLng);
										
		})
		.appendTo("#list");

Nie wiem jak to zrobić, ale za każdym razem jak kliknę w "Pokaż numer" strona przewija się na samą górę i pokazuje to miejsce na mapie zamiast wyświetlić numer.

Podpinam też link do strony, aby można było zobaczyć jak działa i na czym to polega.
link

komentarz 7 lipca 2020 przez Comandeer Guru (602,330 p.)

Do tego, co ja mam, spróbuj dodać po evt.preventDefault() evt.stopPropagation(). Dzięki temu po kliknięciu w link nie powinna się odpalić funkcja dla całego elementu listy.

Ogólnie to, co tutaj się dzieje, to tzw. bąbelkowanie zdarzeń.

komentarz 7 lipca 2020 przez Hardwell Dyskutant (8,980 p.)

do tego kodu co wyżej wstawiłem chciałem przerobić to na jquery, bo nie działały mi inne funkcje, czy w taki sposób jest to dobrze przerobione?

 

$( '#revealNumber' ).one( 'click', ( evt ) => {
	evt.preventDefault();
evt.stopPropagation()
	const { target: link } = evt;

	link.prop('');
	link.prop('tel:+48000000000');
	link.text('000-000-000');
}, { once: true } );

 

komentarz 7 lipca 2020 przez Hardwell Dyskutant (8,980 p.)
@comandeer odpala się funkcja dla całego elementu ale funkcja nie od ciebie tylko ta co wysłałem wyżej (ta co już była na stronie)
komentarz 7 lipca 2020 przez Comandeer Guru (602,330 p.)

Hmm, w takim wypadku kombinowałbym raczej w inną stronę, coś może typu:

$("<li id='l_"+marker['__gm_id']+"' class='clinic_list'>")
.html("<span class='number'>"+number+"</span><div><strong>"+v.name+"</strong><br /><span>"+v.address+"</span><div id='numb_phone' style='width: 130px; line-height: 20px; float: right;'><a href='#' class=\"reveal-number\" role=\"button\">Pokaż numer</a></div><div id=d_"+number+" class='distance'><span>"+distancenode+"</span> <span class='units'></span> <span class='time2'></span></div></div><div class='products'>"+ctype+"</div><a id='la_"+marker['__gm_id']+"' name='la_"+marker['__gm_id']+"'></a>")
.click(function( { target } ){
	$target = $( target );

	if ( $target.is( '.reveal-number:not(.revealed)' ) ) {
		$target.prop( 'role', '' );
		$target.prop( 'href', 'tel:+48000000000' );
		$target.text( '000-000-000' );
		$target.addClass( 'revealed' );

		return;
	}

	infowindow.setContent(info_window_string);
	infowindow.open(map,marker);
	toggleBounce(marker);
	var currentLatLng = new google.maps.LatLng(v.lat,v.lng);
	map.setCenter(currentLatLng);			
})
	.appendTo("#list");

Pisane z palca, więc nie wiem, czy działa.

komentarz 7 lipca 2020 przez Hardwell Dyskutant (8,980 p.)

O kurcze, faktycznie działa!, tylko w dalszym ciągu przewija mi stronę do góry blush

1
komentarz 7 lipca 2020 przez Comandeer Guru (602,330 p.)
$("<li id='l_"+marker['__gm_id']+"' class='clinic_list'>")
.html("<span class='number'>"+number+"</span><div><strong>"+v.name+"</strong><br /><span>"+v.address+"</span><div id='numb_phone' style='width: 130px; line-height: 20px; float: right;'><a href='#' class=\"reveal-number\" role=\"button\">Pokaż numer</a></div><div id=d_"+number+" class='distance'><span>"+distancenode+"</span> <span class='units'></span> <span class='time2'></span></div></div><div class='products'>"+ctype+"</div><a id='la_"+marker['__gm_id']+"' name='la_"+marker['__gm_id']+"'></a>")
.click(function( { target } ){
    $target = $( target );
	
    if ( $target.is( '.reveal-number:not(.revealed)' ) ) {
        $target.prop( 'role', '' );
        $target.prop( 'href', 'tel:+48000000000' );
        $target.text( '000-000-000' );
        $target.addClass( 'revealed' );
	}
	
	if ( $target.is( '.reveal-number' ) ) {
		evt.preventDefault();
		evt.stopPropagation();
		return;
	}
 
    infowindow.setContent(info_window_string);
    infowindow.open(map,marker);
    toggleBounce(marker);
    var currentLatLng = new google.maps.LatLng(v.lat,v.lng);
    map.setCenter(currentLatLng);           
})
    .appendTo("#list");

A taka wersja?

komentarz 7 lipca 2020 przez Hardwell Dyskutant (8,980 p.)
Działa jak natura chciała, Dzięki!! :D
komentarz 8 lipca 2020 przez Hardwell Dyskutant (8,980 p.)
@comandeer, Ostatni raz tyłek zawrócę, w jaki sposób przerobić to, aby przy 1 kliknięciu pokazało numer, a dopiero za 2 razem (Jak już numer będzie wyświetlony) przekierowywało do dzwonienia?
komentarz 8 lipca 2020 przez Comandeer Guru (602,330 p.)
Hmm, prawdę mówiąc to powinno działać.
komentarz 9 lipca 2020 przez Hardwell Dyskutant (8,980 p.)
Teraz przy pierwszym kliknięciu zanim pokaże numer przekierowuje do dzwonienia, a powinno dopiero jak numer będzie pokazany
komentarz 9 lipca 2020 przez Comandeer Guru (602,330 p.)
Możesz to pokazać online?
komentarz 9 lipca 2020 przez Hardwell Dyskutant (8,980 p.)

http://motoradar.pl/, w wyszukiwarce wpisz Olkusz, tam będą przykładowe sklepy i obok przyciski

 

komentarz 9 lipca 2020 przez Comandeer Guru (602,330 p.)

Prawdę mówiąc nie wiem, czemu nie działa… Ale można spróbować zmodyfikować ten kod, np:

$("<li id='l_"+marker['__gm_id']+"' class='clinic_list'>")
.html("<span class='number'>"+number+"</span><div><strong>"+v.name+"</strong><br /><span>"+v.address+"</span><div id='numb_phone' style='width: 130px; line-height: 20px; float: right;'><a href='#' class=\"reveal-number\" role=\"button\">Pokaż numer</a></div><div id=d_"+number+" class='distance'><span>"+distancenode+"</span> <span class='units'></span> <span class='time2'></span></div></div><div class='products'>"+ctype+"</div><a id='la_"+marker['__gm_id']+"' name='la_"+marker['__gm_id']+"'></a>")
.click(function(){
    infowindow.setContent(info_window_string);
    infowindow.open(map,marker);
    toggleBounce(marker);
    var currentLatLng = new google.maps.LatLng(v.lat,v.lng);
    map.setCenter(currentLatLng);           
}).appendTo("#list").find( '.reveal-number', ( evt ) => {
	var $target = $( evt.target );
	
	evt.stopPropagation();
	
	if ( !$target.hasClass( 'revealed' ) ) {
		evt.preventDefault();

		$target.prop( 'role', '' );
        $target.prop( 'href', 'tel:+48000000000' );
        $target.text( '000-000-000' );
		$target.addClass( 'revealed' );
	}
})

 

komentarz 9 lipca 2020 przez Hardwell Dyskutant (8,980 p.)
Dziwne
komentarz 9 lipca 2020 przez Hardwell Dyskutant (8,980 p.)

@Comandeer, Ten kod chyba nie działa 

1
komentarz 9 lipca 2020 przez Comandeer Guru (602,330 p.)
$("<li id='l_"+marker['__gm_id']+"' class='clinic_list'>")
.html("<span class='number'>"+number+"</span><div><strong>"+v.name+"</strong><br /><span>"+v.address+"</span><div id='numb_phone' style='width: 130px; line-height: 20px; float: right;'><a href='#' class=\"reveal-number\" role=\"button\">Pokaż numer</a></div><div id=d_"+number+" class='distance'><span>"+distancenode+"</span> <span class='units'></span> <span class='time2'></span></div></div><div class='products'>"+ctype+"</div><a id='la_"+marker['__gm_id']+"' name='la_"+marker['__gm_id']+"'></a>")
.click(function(){
    infowindow.setContent(info_window_string);
    infowindow.open(map,marker);
    toggleBounce(marker);
    var currentLatLng = new google.maps.LatLng(v.lat,v.lng);
    map.setCenter(currentLatLng);           
}).appendTo("#list").find( '.reveal-number' ).on( 'click', ( evt ) => {
    var $target = $( evt.target );
     
    evt.stopPropagation();
     
    if ( !$target.hasClass( 'revealed' ) ) {
        evt.preventDefault();
 
        $target.prop( 'role', '' );
        $target.prop( 'href', 'tel:+48000000000' );
        $target.text( '000-000-000' );
        $target.addClass( 'revealed' );
    }
})

Fakt, wkradł się babol.

 

komentarz 9 lipca 2020 przez Hardwell Dyskutant (8,980 p.)
No co ci mam więcej napisać, Dziwne jak by po twojej pomocy coś nie działało, Dzięki! Zamykam
0 głosów
odpowiedź 6 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
edycja 6 lipca 2020 przez _Pita_

Ja nadałbym divovi onklicka, i za pomocą jQ zmienił klasę na taką, zawierającą numer, lub zmienił wartość diva za pomocą inner HTML (tu bez JQ)

Edit: podaję te drugie rozwiązanie poniżej:

<!DOCTYPE html>
<html>
<head>
	<title>test</title>

</head>
<body>


<div id="nr" onclick="funkcja()">Numer telefonu</div>


<script type="text/javascript">
	function funkcja() {

document.getElementById('nr').innerHTML = "123 456 789"
	}

</script>



</body>
</html>

 

komentarz 6 lipca 2020 przez Comandeer Guru (602,330 p.)
W jaki sposób klasa może zawierać numer?
komentarz 6 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Dałoby się chyba pokombinować z "content"
komentarz 6 lipca 2020 przez Comandeer Guru (602,330 p.)
Tak, ale wyłącznie pod warunkiem, że treść byłaby wstawiana przy pomocy pseudoelementu, co sprawia, że tak wstawionego numeru nie dałoby się zaznaczyć.
komentarz 6 lipca 2020 przez _Pita_ Stary wyjadacz (11,410 p.)
Dlatego właśnie wspomniałem jeszcze o możliwości z innerHTML
komentarz 7 lipca 2020 przez Hardwell Dyskutant (8,980 p.)

Zamieniłem sobie to na jquery 
 

function funkcja() {
$('#nr').text('Hello world'); 
}

Ale dalej mam ten sam problem co wyżej opisałem (po naciśnięciu strona wraca na samą górę i nic się nie dzieje z tym przyciskiem)

Podobne pytania

0 głosów
3 odpowiedzi 328 wizyt
pytanie zadane 4 marca 2020 w HTML i CSS przez KamQiX Dyskutant (9,090 p.)
0 głosów
1 odpowiedź 112 wizyt
pytanie zadane 16 lutego 2017 w JavaScript przez Vorex444 Dyskutant (9,610 p.)
0 głosów
1 odpowiedź 198 wizyt
pytanie zadane 26 listopada 2017 w JavaScript przez Vorex444 Dyskutant (9,610 p.)

92,620 zapytań

141,474 odpowiedzi

319,813 komentarzy

62,004 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...