Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript][HTML] Wartość jednego pola zależna od tego co w innym polu.
politowski
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 19.10.2017

Ostrzeżenie: (0%)
-----


Witam zrobiłem sobie taki formularz do wprowadzania informacji o profilach społecznościowych na stronie i potrzebuje pomocy bo utknąłem.
https://jsfiddle.net/xvyu34u0/5/
Chodzi o to żeby dodać do tego formularza opcję weryfikacji adresów url.

Jak fragment tekstu wpisanego w formularz będzie zawierał 'twitter.com' to chciałbym aby w polu 'Short Title' pojawiło się 'Twitter' ikonka globusa zmieniła się na fa-twitter, jak 'instagram.com' to pole 'Short Title' dostanie wartość 'Instagram' ikonka zmieni się na fa-instagram itd.

Mógłbym to pewnie w JS zrobić jakimiś ifem ale tych reguł będzie więcej więc było by masę ifów, jak to ogarnąć prościej?
Na razie wymyśliłem sobie że zrobię taką tablicę:
Kod
var socialServices = {
    'facebook.com' : {
        'title' : 'Facebook',
        'icon' : 'fa-facebook'
    },
    'twitter.com' : {
        'title' : 'Twitter',
        'icon' : 'fa-twitter'
    },
    'instagram.com' : {
        'title' : 'Instagram',
        'icon' : 'fa-instagram'
    },
};

tylko nie wiem jak ogarnąć chodzenie po tablicy i sprawdzanie jak formularz zawiera facebook.com to podstaw wartość klucza title dla facebook.com w inpucie www_label[] i wartość icon zamiast 'fa-globe'
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


https://jsfiddle.net/xvyu34u0/10/
Go to the top of the page
+Quote Post
politowski
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 19.10.2017

Ostrzeżenie: (0%)
-----


Dzięki działa, a co zrobić żeby rozpoznawało też adresy w stylu https://facebook.com/nazwa-profilu ?
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Pobawić się wyrażeniami regularnymi.
Go to the top of the page
+Quote Post
politowski
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 19.10.2017

Ostrzeżenie: (0%)
-----


Domyślam się ze sprawę załatwią wyrażenia regularne, ale całkiem nie wiem jak to ugryźć, mógłbym prosić o przykład choćby dla jednego klucza np facebook.com ?
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Możesz coś z tego wykorzystać https://stackoverflow.com/questions/1789945...g-in-javascript
Zależy czy ma być dokładny adres czy tylko fragment domeny.
Go to the top of the page
+Quote Post
politowski
post
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 19.10.2017

Ostrzeżenie: (0%)
-----


Zależy mi na tym żeby jeśli w polu input znajduje sie domena i jest ona w tablicy to wtedy podstaw wartośc z klucza icon lub title
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Tak jak napisałeś wyżej, wyrażenia regularne będę tu pomocne. Użyj ich w tablicy socialServices zamiast nazw domen.
Po wpisaniu danego ciągu w pole, sprawdzisz w pętli, z którym wyrażeniem regularnym zgadza się wartość. Jeśli się zgadza, to będziesz miał icon i title na tacy.
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


https://jsfiddle.net/xvyu34u0/11/
Go to the top of the page
+Quote Post
politowski
post
Post #10





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 19.10.2017

Ostrzeżenie: (0%)
-----


Dzięki, dodałem jeszcze klucz 'regexp' dla każdego serwisu, sprawdzam poprzez match i działa prawie idealnie, jak wpiszę prawidłowy adres url twittera, facebooka, instagrama, to zmienia opisy idealnie, jest tylko jeden mały problem, chciałbym aby jeśli w wyniku edycji nadpiszę adres który jest w tablicy takim którego nie ma w tablicy, ewentualnie wyczyszczę pole adresu całkiem, czyściło też pole 'short title', i jest jeszcze kwestia tego że działa tylko na jednym polu, jak sklonuje pola przez "+" po prawo, to wszystko pada nic nie działa, nigdzie nie waliduje danych.
https://jsfiddle.net/xvyu34u0/24/

A tak dodatkowo: jak ograniczyć dodawanie pól przez "+" do max 10 zestawów?
Go to the top of the page
+Quote Post
viking
post
Post #11





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


https://prophp.pl/article/28/propagacja_i_d...en_w_javascript
Po kliknięciu + podlicz ilość. Wygląda jakbyś coraz bardziej czekał na gotowy kod.
Go to the top of the page
+Quote Post
politowski
post
Post #12





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 19.10.2017

Ostrzeżenie: (0%)
-----


Cytat(viking @ 20.10.2017, 06:41:00 ) *
https://prophp.pl/article/28/propagacja_i_d...en_w_javascript
Po kliknięciu + podlicz ilość. Wygląda jakbyś coraz bardziej czekał na gotowy kod.

Skądże znowu nie czekam na gotowca, aczkolwiek z nich najlepiej mi się uczyć i zrozumieć działanie. Jak widzisz to nie jest tak że Twój kod został w 100% przepisany i czekam na kolejne gotowe rozwiązania. Działam w oparciu o kod który podałeś ale go zmodyfikowałem, próbuje coś robić samemu, i jak mi nie wychodzi to dopytuje.
JS nie ogarniam jeszcze aż tak bardzo, szybciej bym to zrobił w PHP, mam już nawet gotowy kod który zwraca mi json z tablicą w zależności od tego co jest w $_POST, ale wolałbym to zrobić bez AJAXa, tylko w JS/jQuery
  1. // $post_data - dane przesyłane metodą POST
  2. $post_data = 'https://www.instagram.com/explore/tags/annalewandowska/';
  3. $socialServices = array(
  4. 'facebook' => array(
  5. 'regexp' => '#https?\://(?:www\.)?facebook\.com/(\d+|[A-Za-z0-9\.]+)/?#im',
  6. 'icon' => 'fa-facebook',
  7. 'title' => 'Facebook'
  8. ),
  9. 'twitter' => array(
  10. 'regexp' => '#https?://(?:www\.)?twitter\.com/(\d+|[A-Za-z0-9\.]+)/?#im',
  11. 'icon' => 'fa-twitter',
  12. 'title' => 'Twitter'
  13. ),
  14. 'instagram' => array(
  15. 'regexp' => '#https?://(?:www\.)?instagram\.com/(\d+|[A-Za-z0-9\.]+)/?#im',
  16. 'icon' => 'fa-instagram',
  17. 'title' => 'Instagram'
  18. ),
  19. );
  20.  
  21. foreach ($socialServices as $value) {
  22. if(preg_match($value['regexp'], $post_data)){
  23. $data[] = array ('title'=> $value['title'], 'icon' => $value['icon']);
  24. }
  25. }
  26.  
  27. if(!isset($data)){
  28. $data[] = array ('title'=> '', 'icon' => 'fa-globe');
  29. }
  30. header('Content-Type: application/json');
  31. echo json_encode($data);
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 13:33