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

Dodawanie HTMLInputElement do obiektu

Object Storage Arubacloud
0 głosów
236 wizyt
pytanie zadane 18 maja 2016 w JavaScript przez Ivan Maniak (60,650 p.)

Chciałem Element wrzucić do obiektu, ale jak to w JS - nie wychodzi mi. Problem w tym, że po dodaniu czterech elementów w obiekcie znajduje się tylko jeden. Dlaczego? I jak to możliwe?
Kod: http://codepen.io/klusaktomasz/pen/WwqeEY?editors=1010

// HTML
<form action="" id="form">
<input type="text" id="email"/>
<input type="password" id="password"/>
<input type="email" id="name"/>
<input type="search" id="foo"/>
	
<button>I am a button!</button>
</form>

// JS
var form = document.querySelector('#form');

var inputs = {
	'email': {'key': 'value1'},
	'password': {'key': 'value2'},
	'name': {'key': 'value3'},
	'foo': {'key': 'value4'}
}

var elements = {};

for(key in inputs)
{
	// Sprawdzanie czy input istnieje
	if( form.querySelector('input[id='+ key +']') == null) break;
	
	// Dodawanie HTMLInputElement do obiektu
	var input = form.querySelector('input[id='+ key +']');
	elements[input] = inputs[key];
	console.log(input.type + ' = ' + inputs[key]['key']);
	
	//console.log( elements );
	//console.log( inputs[key] );
	
}

console.log(elements);

 

1 odpowiedź

+3 głosów
odpowiedź 19 maja 2016 przez Comandeer Guru (601,590 p.)
wybrane 19 maja 2016 przez Ivan
 
Najlepsza
elements[input]

W tym miejscu próbujesz użyć obiektu jako klucza w obiekcie. A JS nie zezwala na klucze w postaci obiektów. Tym sposobem niejawnie jest wywoływana konwersja do stringa typu [Object HTMLInputElement]. Jak łatwo zauważyć, dla wszystkich pól formularza zostanie stworzony dokładnie taki sam string - stąd tylko jedno pole w obiekcie na końcu.

Jeśli chcesz użyć obiektów jako kluczy, musisz użyć struktury do tego przystosowanej. W JS istnieje tylko jedna taka, WeakMaphttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/WeakMap

komentarz 19 maja 2016 przez Ivan Maniak (60,650 p.)
edycja 19 maja 2016 przez Ivan
Faktycznie, myślałem, że nie ma żadnego "ogranicznika".
Możesz mi doradzić co jest lepsze/optymalniejsze? Dodanie id/name jako klucza i potem za każdym razem sprawdzanie czy input, którego szukam ma id/name CZY może korzystanie z WeakMap i po prostu wykonywanie operacji na każdym kluczu tablicy?
komentarz 19 maja 2016 przez Comandeer Guru (601,590 p.)

To zależy. Osobiście wziąłbym WeakMap i pokombinował z nim.

Podobne pytania

+1 głos
2 odpowiedzi 166 wizyt
pytanie zadane 23 kwietnia 2022 w JavaScript przez nanosoft Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 564 wizyt
0 głosów
1 odpowiedź 529 wizyt
pytanie zadane 27 grudnia 2015 w JavaScript przez ScriptyChris Mędrzec (190,190 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 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!

...