2013-02-15 13 views
5

Jak działa atrybut wartości dla tagu wejściowego html po edycji za pomocą inputbox?Atrybut wartości wejściowej HTML - to samo wejście, (widocznie) różne wyniki

przykład:

<input type="text" name="test" id="test" value="Hello world" /> 

to pokaże pole wejściowe z tekstem "Hello World". Gdybym go edytować inputing nowy ciąg do świadczonych tekstowym (nie poprzez kod surowca), a następnie postarać się o jego wartość za pomocą js jak ten

alert(document.getElementById('test').value) 

będę słusznie uzyskać nową wartość. Ale jeśli sprawdzę element za pomocą narzędzi programistycznych Chrome (lub firebuga lub cokolwiek, co wolisz), zobaczę ten sam ciąg znaków "Hello world" jak na początku ..

Który z tych dwóch elementów jest właściwy jeden? wartość js lub inspektor chrome?

Oto Example Fiddle i oto screenshot enter image description here

doszedłem do tego, starając się znaleźć rozwiązanie tego problemu: Klasyczny sklepu sytuacji, mam tabelę z tagiem wejść X, gdzie użytkownik może wprowadzić ilość X elementów. Muszę sprawdzić, czy jedna lub więcej wartości uległy zmianie od poprzedniej wartości każdego wejścia: jeśli porównanie między OLD i NEW val zwraca, że ​​wartość zmieniła się, muszę zaktualizować zamówienie. W przeciwnym razie nie trzeba zapisywać/aktualizować.

Pomyślałem, że mogę użyć attr. "value" do przechowywania "starej" wartości wejścia, ale prawdopodobnie nie był najlepszym wyborem.

Czy ktoś może wyjaśnić to zachowanie? To tylko problem "odświeżania", czy jest coś jeszcze w tyle?

Odpowiedz

8

Obie mają rację, pokazują tylko różne rzeczy.

DOM valuewłasności daje bieżącą wartość.

HTML valueatrybut daje domyślny wartość (taka sama jak DOM defaultValuewłasności).

Inspektor DOM przeglądarki pokazuje wartości atrybutów w widoku HTML. Musisz spojrzeć na widok właściwości, aby zobaczyć wartości właściwości.

Screen shot of Chrome property view

1

można przypisać tzw zastrzeżonych atrybut do wejścia; na przykład "oldval", aby później można było porównać go z aktualną wartością:

+3

Można, ale po co zawracać sobie głowę, gdy "defaultValue" przychodzi za darmo? – Quentin

5

Możesz znaleźć informacje w tym article.

Wartość widoczna w html jest wartością domyślną, w którą załadowany jest formularz. Jeśli chcesz, aby DOM aktualizował się, musisz użyć ele.setAttribute ("wartość", "nowa wartość")

Jeśli chcesz się dowiedzieć, czy element został zmieniony, najlepiej jest dołączyć wydarzenie onchange do elementy wejściowe i zaznacz flagę w procedurze zmiany, aby wiedzieć, czy formularz się zmienił, czy nie.

+0

mmm onchange zostanie uruchomiony, nawet jeśli wprowadzę tę samą wartość w polu wprowadzania. Mam rację? – BeNdErR

+0

Tak. To prawda. –

+0

Generalnie w naszych implementacjach tworzymy prostą klasę dla pola wejściowego, w której inicjujemy ją z pewną wartością. Klasa będzie odpowiedzialna za renderowanie elementu wejściowego i słuchanie jego zdarzeń, a kiedy przechwyci zdarzenie change, może sprawdzić, czy wartość jest faktycznie zmieniana, ponieważ buforuje zainicjalizowaną wartość. Jeśli uważasz, że to komplikuje twoje wymagania, możesz utrzymywać tablicę lub listę wartości, mapować ją do elementów wejściowych i wykonywać sprawdzanie na podstawie wartości przechowywanej w tablicy. Tak czy inaczej będziesz potrzebować manipulacji js –

Powiązane problemy