Zrušení výběru options – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zrušení výběru options – JavaScript, AJAX, jQuery – Fórum – Programujte.comZrušení výběru options – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

oxidián0
Grafoman
13. 7. 2016   #1
-
0
-


Toto je část kódu na smazání options ze seznamu. V tomto případě je delete=true a smazat chci všechny options. Smažou se všechny kromě toho posledního nebo ten poslední zůstává vybraný. Jak to udělat aby se smazali všechny a nezůstal žádný vybraný?
   




  var select = document.getElementById("list");
  var title = select.options[select.selectedIndex].value;  
  if (!delete_all && select.selectedIndex<1)
    return false;
  for (var k in data.advanced )
    {
    if (k == title || delete_all )
      {
      delete data.profiles.advanced[k];
      delete data.advanced[k];
      if ( !delete_all )
        select.selectedIndex--;
      else
        select.selectedIndex = null;  
      data.default_profiles.advanced = select.options[select.selectedIndex].value;
      
      if (!delete_all) 
        break;
      }
    } // end for

Jinak by se to snad dalo zjednodušit takto:

  var select = document.getElementById("list");
  var title = select.options[select.selectedIndex].value;  
  for (var k in data.advanced )
    {
      delete data.profiles.advanced[k];
      delete data.advanced[k];
      select.selectedIndex = null;  
    } // end for
Nahlásit jako SPAM
IP: 78.45.87.–
oxidián0
Grafoman
13. 7. 2016   #2
-
0
-

#1 oxidián
Chyba byla někde jinde, ale jinak jsem zjistil že se to dělá takto select.option[0].selected = false

Nahlásit jako SPAM
IP: 78.45.87.–
Kit+15
Guru
13. 7. 2016   #3
-
0
-

#2 oxidián
Není jednodušší použít metodu array.splice(index, 1), která nežádoucí element odstraní?

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
oxidián0
Grafoman
13. 7. 2016   #4
-
0
-

To by nejspíš nefungovalo na objekt. A proč myslíš že je to jednodušší? Mě příjde delete jednodušší.

Nahlásit jako SPAM
IP: 78.45.87.–
Kit+15
Guru
13. 7. 2016   #5
-
0
-

#4 oxidián
Delete ti neposune indexy a ponechá tam prázdné místo.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4016 příspěvků
14. 7. 2016   #6
-
0
-

Ja to vzdy radeji filtruji cyklem do noveho pole, objektu. Na nejake spesl metody se nespoleham, protoze byvaji obvykle urcene na konkretni vec a to treba ta ma nemusi vzdy za vsech okolnosti byt..

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:9031:c5...–
oxidián0
Grafoman
18. 7. 2016   #7
-
0
-

#5 Kit
Co znamená, že nechá prázdné místo? Klíč zůstane jako null nebo tak něco to jsem už viděl, ale co to znamená pro datovou část objektu? Ta se dealokuje, ne? Jestli z { key: data } se změní na { null: null} tak už skoro není co řešit. I když pokud by uživatel vytvořil několik set profilů, tak by to asi zdržovalo při vyhledávání. Zatím budu doufat že ne. Nechci se v tom moc do detailu šťourat v první verzi.

Nahlásit jako SPAM
IP: 78.45.87.–
Kit+15
Guru
18. 7. 2016   #8
-
0
-

#7 oxidián
Zkus si promyslet, jaký je rozdíl mezi polem, seznamem a slovníkem. Jsou to 3 nejobvyklejší datové struktury (resp. kolekce), které se dnes používají. A často se pletou. Každá z nich potřebuje specifický způsob zacházení při programování, jinak vznikají zbytečné zmatky.

Takže ta tvá struktura je pole, seznam nebo slovník?

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
oxidián0
Grafoman
18. 7. 2016   #9
-
0
-

Pojem slovník slyším poprvé. Pole to není. Je to objekt. Funguje jako seznam. Já tedy mezi slovníkem a seznamem rozdíl nevidím. Zní to stejně :-)

Nahlásit jako SPAM
IP: 78.45.87.–
Kit+15
Guru
19. 7. 2016   #10
-
0
-

#9 oxidián
Slovník (angl. dictionary) je znám i pod pojmem "asociativní pole", kde klíčem je typicky string a hodnotou také nějaký typ - třeba také string.

Pole známe snad všichni. Indexem je celé číslo, případně položka výčtu, znak nebo cokoli, co je vnitřně reprezentováno jako integer. Mimo tzv. řídká pole. Indexy by se neměly používat, neboť položky se mohou přesouvat mezi pozicemi. Podstatné je pouze pořadí.

V původním dotazu jsi použil slovo "seznam", což zřejmě odpovídá realitě. Měl bys s tím tedy zacházet jako se seznamem, nikoli jako s polem. Proto jsem ti doporučil metodu splice(). Pro práci se seznamy je však ještě spousta dalších užitečných metod, které je dobré znát. Zde by se jistě uplatnila metoda filter(), která by zřejmě zredukovala řešení problému na jeden řádek, možná dva.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
oxidián0
Grafoman
19. 7. 2016   #11
-
0
-

Původní dotaz byl o zrušení výběru options, nikoliv o poli. Ukládání dat má být do asociativního pole, ale protože JS nic takového nemá, používám objekt. Filter je zajímavý nápad, ale aplikoval bych to až budu s projektem dále a budu se zabývat většími detaily.

Nahlásit jako SPAM
IP: 78.45.87.–
Kit+15
Guru
19. 7. 2016   #12
-
0
-

#11 oxidián
Na smazání options může posloužit metoda map().

Jak jsem již psal, asociativní pole je totéž co slovník. Někdy se používá i pojem mapa, ale ten IMHO není tak výstižný. Správně jsi napsal, že JS nemá slovník, ale má objekt, který se k tomu účelu dá použít.

Metody map(), filter() a reduce() jsou vemi univerzálními pro práci s kolekcemi. S jejich pomocí se velmi účinně zbavíš většiny cyklů a zkrátíš skripty na minimum.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý