Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][HTML] Wartość jednego pola zależna od tego co w innym polu.
Forum PHP.pl > Forum > Przedszkole
politowski
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'
viking
https://jsfiddle.net/xvyu34u0/10/
politowski
Dzięki działa, a co zrobić żeby rozpoznawało też adresy w stylu https://facebook.com/nazwa-profilu ?
viking
Pobawić się wyrażeniami regularnymi.
politowski
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 ?
viking
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.
politowski
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
trueblue
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.
viking
https://jsfiddle.net/xvyu34u0/11/
politowski
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?
viking
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.
politowski
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);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.