2010-01-21 12 views
34

Mam proste pole wejściowe wewnątrz znacznika forma:Nie można ustawić ukrytą wartość Pole tekstowe w jQuery

<body> 
    <form action="#"> 
     <label>Input</label> 
     <input type="hidden" id="foo" name="foo" /> 

    </form> 
</body> 

Próbowałem ustawić tę wartość z pliku JS:

$(document).ready(function(){ 
    $('#foo').val('foo') 
}) 

ale w źródle html atrybut nie jest w ogóle ustawiony. Jeśli spróbuję ustawić typ wejścia na "przycisk" lub cokolwiek innego, to działa. Po prostu nie mogę tego zrobić za pomocą pola wejściowego hidden. Co ja robię źle?

+5

Przyjęte rozwiązanie nie odpowiada rzeczywistej pytanie, mimo że jest pomocny w prowadzeniu do rozwiązania. Prawdopodobnie lepiej jest zaakceptować poprawną odpowiedź, ponieważ to pytanie dostaje 10 tys. Wyświetleń rocznie. –

+0

Czy pomogłoby to, gdyby pole wejściowe było wartością początkową? (nawet jeśli jest to pusty ciąg) –

Odpowiedz

25

można pobrać wartość z ukryte pole, jeśli ustawisz znacznik val?

np.

<input type="hidden" id="foo" name="foo" value="bar" /> 

$(document).ready(function(){ 
    alert($('#foo').val()); 
}) 
+16

Aby wyjaśnić: autor próbował zobaczyć zmodyfikowaną wartość za pomocą "Zobacz kod źródłowy". Uwaga: zmiany dokonane w DOM dynamicznie nie są widoczne w "Zobacz kod źródłowy". – jjmontes

+0

jest ta dziwna rzecz, gdy trzeba sklonować ukryte dane wejściowe http://jsfiddle.net/YvBfP/ – max4ever

1

że muszę zobaczyć cały plik, ale domyślam się, albo nie są w tym pliku źródłowego jquery.js lub masz wiele elementów o identyfikatorze foo

+0

héhé ... Miałem dwa identyczne identyfikatory w dwóch formach, a twoja odpowiedź sprawiła, że ​​pomyślałem o sprawdzeniu tego ... dzięki! – citraL

24

Wymyśliłem to. Wartość została ustawiona przez jQuery, ale kiedy oglądałem źródło, nowa wartość nie była wyświetlana. Próbowałem tego (dzięki Fermin):

$('#foo').val('poo') 
alert($('#foo').val()) 

i wyświetliło zmodyfikowaną wartość.

+1

Polecam używanie narzędzia programistycznego, takiego jak firebug do Firefoxa, aby łatwiej było zobaczyć dynamiczny kod źródłowy. – David

+1

Jeśli Fermin odpowiedział na twoje pytanie, powinieneś oznaczyć je jako zaakceptowaną odpowiedź. – rfunduk

+0

Wtyczka programisty przeglądarki Firefox ma również narzędzie "Wyświetl wygenerowane źródło", które pokaże źródło ze wszystkimi zastosowanymi zmianami javascript. –

3

Też walczę z tym. Jeśli ustawisz wartość początkową, powiedz "0", a następnie obejrzyj DOM używając czegoś takiego jak Firebug, zauważysz, że DOM zaktualizuje się. Z jakiegoś powodu, jeśli wartość początkowa jest ustawiona na null lub pusty łańcuch, DOM nie aktualizuje się, ale wartość jest w rzeczywistości nadal przechowywana.

Można to sprawdzić poprzez ostrzeganie Val po ustawieniu go (jako sugerowane we wcześniejszych postów)

1

miałem ten sam problem z polem wejściowym ukrytym. Id ustawiam wartość początkową na 0, działa dobrze, ale czasami nie chciałem mieć wartości początkowej 0. Więc testowałem z wartością = "", białym znakiem, i to działa również dla mnie. Jeśli wypełnisz dynamiczną wartość z PHP, możesz zrobić value="<?= $val+0; ?>", jeśli 0 jest dla ciebie dobre, lub value="<?= $val; ?> ", jeśli odstęp jest w porządku.

+0

może potwierdzić. Podczas inicjowania ukrytego pola wejściowego za pomocą "", mam problem z aktualizowaniem go za pomocą jQuery. Podczas inicjalizacji z 0 działało dla mnie. –

2

Miałem ten problem, gdy POST -ing mój formularz i mój skrypt PHP nie mógł uzyskać POST -ed wartość. Użyłem tego:

$('#elemId').attr("name", theValue); 

Mam nadzieję, że to pomaga.

22

Najlepszą odpowiedzią, jaką znalazłem, była wersja http://forum.jquery.com/topic/passing-value-to-hidden-form-field.

Zamiast $('#Data').val(data); Gdzie ukryte pole ID to 'dane'

Zastosowanie $('input[name=Data]').val(data);

Works idealnie dla mnie

+3

działa, ponieważ "Dane" tutaj to "nazwa" wejścia, a nie id. W każdym razie, głosujcie ode mnie, ponieważ ja też o tym zapomniałem. –

0

Żadne z powyższych rozwiązań nie pracował dla mnie.

musiałem wykonać następujące czynności, aby to działało:

$('#foo').val(data).blur(); 
0

Raczej następnie inicjalizacji swój atrybut wartość z ciągiem zainicjować swój wkład takiego.

<input type="hidden" name="foo" id="foo" value="${foo}"> 

"foo" będzie zawierał nową wartość, którą ustawiłeś.

1

wiem, że jest późno, ale wciąż może to komuś pomóc .... Jeśli żaden z powyższych rozwiązań pracy, po prostu to zrobić ...

$(document).ready(function() { 
$('#foo').attr("value","foo") }); 
Powiązane problemy