2010-05-18 18 views
11

Mam formularz, w którym użytkownik może wprowadzić link, kliknij przycisk "dodaj link", a następnie link ten (przez jQuery) zostanie dodany do formularza jako ukryte pole. Problem polega na tym, że nie przesyłaj napisu POST, gdy przesyłam formularz. To naprawdę zaczyna mnie mylić. Chodzi o to, że jeśli zakodowuję ukryte pole w formularzu, zostanie ono opublikowane, ale moja funkcja nie działa z jakiegoś powodu. Ukryte pole DOES zostanie dodane do mojego formularza, tak jak widzę w Firebug, ale po prostu nie jest wysyłane z danymi POST.HTML Formy pól HIdden dodane z Javascriptem nie są POSTing

Uwaga: używam tablicy w JavaScript do przechowywania elementów, dopóki formularz nie zostanie przesłany, co również powoduje, że są widoczne dla użytkownika, aby zobaczyć, co dodali. Używam notacji [] na polu "nazwa" elementu, ponieważ chcę, aby łącza były podawane do tablicy w PHP.

Oto tworzenie łącza, które jest dołączone do mojej postaci:

 function make_hidden_element_tag(item_type, item_content, item_id) 
{ 
    return '<input type="hidden" name="' + item_type + '[]" id="hidden_link_' + item_id + '" value="' + item_content + '"/>'; 

Czy ktoś ma pomysł dlaczego to nie może być księgowania. Jak wspomniano powyżej, wszystkie zakodowane na sztywno znaczniki, które są prawie identyczne z powyższymi, działają dobrze, po prostu ten tag nie działa. Oto jak ja dodając tag do formularza z jQuery:

$('#link_td').append(make_hidden_element_tag('links', link, link_array.length - 1)); 

używam ram Kohana 3, chociaż nie jestem pewien, że ma żadnego wpływu na to, bo to naprawdę nie robi nic z czas, w którym kod HTML został dodany do strony i naciśnięty został przycisk przesyłania.

Odpowiedz

2

Właśnie zorientowałem się, o co chodziło. Jestem zakłopotany i zakłopotany. Jak wspomniano, używam Kohana Framework. Nie jestem pewien, czy to ma coś wspólnego z tym, ale może być ważne.

miałem elementów w tej kolejności:

<table> 
    <form> 
     .............form stuff....... 
    </form> 
</table> 

i nie pozwalał moje dane dodane do przyłączenia się do tablicy POST podczas składania formularza, chociaż elementów, które były „twarde kodowanych” za pomocą FORMULARZA Kohana za klasa działała dobrze. Właśnie zauważyłem, że nadchodzi przed całą gałęzią. Starałem się upewnić, że mam formularz Forma :: close w moim widoku Kohana, ale nigdy nie wyobrażałem sobie, że zamyka się bezpośrednio po tagu otwierającym.

Wielkie dzięki za pomoc. Jest to jeden z tych błędów, które nie miały sensu, ale wydaje mi się, że to ma sens, dlaczego $ .append nie działało wcześniej. Zawsze patrzyłem i zobaczyłem, że dołącza ono bezpośrednio do innych znaczników, które wysyłano z danymi POST, i założyłem, że wszystko to dzieje się wewnątrz FORMULARZA.

Czy ktokolwiek może wyjaśnić, dlaczego należy enkapsulować, a nie odwrotnie, aby HTML poprawnie renderował? Czy może to być kwestia Kohana?

Wielkie dzięki za pomoc dla wszystkich, to była dobra (ale bardzo frustrująca) lekcja.

+1

Cóż, osobiście mam tabelę w elemencie formularza, a nie aktualną formę (formularz w tabeli), tak że dowolne dane wejściowe/wybierz/textarea, które dodaję w tabeli, zostaną automatycznie dodane do formularza. ................ Zobacz mój ostatni komentarz zadając bardzo ukierunkowane pytanie - czy element #link_td znajduje się w elemencie formularza? :) –

+0

@master, jest/był w tabeli i wewnątrz formularza .... formularz zamknięty bezpośrednio PRZED znacznikiem, więc naprawdę nie widziałem z nim problemu. Nie wiem, dlaczego miałoby to znaczenie, ponieważ zaraz po stole pojawił się tag otwierający formularz i tag zamykający bezpośrednio po zamknięciu znacznika tabeli. Nie jestem pewien, czy rozumiem, na czym polega problem. – dscher

+0

To ma znaczenie. Tylko po to, aby upewnić się, że ludzie, którzy to zrobią, czytają to. – mplungjan

2

drodzy używajcie wtyczki jquery do dynamicznego dodawania elementów domena html, co to jest #link_td ??

+0

#link_td jest komórką tabeli, w której ukrywam ukryte linki. .dodać? - jeśli jest inna wtyczka jQuery, która jest potrzebna do dołączania elemów HTML, nie wiem ... i wolałbym jej nie używać. To nie jest nauka rakietowa, to chyba całkiem podstawowe. – dscher

+0

Tak, to nie jest prawdziwa nauka o rakietach, dodajesz '' Ciąg znaków zamiast tworzyć dom za pomocą jquery/javascript – Chirag

+0

jQuery jest na tyle sprytny, aby dodać węzeł dla ciebie – CurtainDog

5

Jeśli dane nie są przesyłane do serwera, element wejściowy zdecydowanie nie jest dodawany do formularza.

Spróbuj wykonując następujący fragment kodu przed złożeniem formularza:

<form onsubmit="return doBeforeSubmit(this);"> ... </form> 

a funkcja jest ...

function doBeforeSubmit(form) 
{ 
    var es = form.elements; 
    var l = es.length; 

    var msgs = []; 

    for(var idx = 0; idx < l; idx++) 
    { 
     var e = es[idx]; 
     msgs.push('name=' + e.name + ', type=' + e.type + ', value=' + e.value; 
    } 

    alert(msgs.join('\n')); 
    return false; 
} 

Jeśli nie dostać swoje pole, a następnie „wejście” nie jest dodawany do formularza, ale w innym miejscu.

Jeśli zdobędziesz pole ... będziemy musieli kopać głębiej.

+1

Podobnie, warto poznać i pokochać panel Net Firebuga. – CurtainDog

+1

@master i @ curtaindog, używam Firebug Net Panel już i naprawdę go uwielbiam. Niestety moje dane nie znajdują się w danych POST wysyłanych do serwera po przesłaniu formularza. Jak wspomniano powyżej, ukryty element, który chcę dodać, dołącza do mojego dokumentu dokładnie tam, gdzie chcę, kiedy uruchomię funkcję javascript ... to po prostu nie kończy się na danych POST. Również mój ukryty element wygląda dokładnie tak, jak ten zakodowany na stałe, który jest w formularzu i jest przesyłany do POST. Zastanawiam się, czy to jest problem ramowy? – dscher

+0

Czy otrzymałeś swoje pole na liście elementów w formularzu? –

Powiązane problemy