Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF][ZendFramework]Zend Form + jQuery problem z niektorymi polami
Skyline
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 25.07.2007

Ostrzeżenie: (0%)
-----


Witam

Mam problem z wypelnieniem pola typu select (wygenerowanego przez zend_form) za pomoca jQuery.

Jesli mam element typu textarea:

  1. $this->addElement('textarea', 'address', array(
  2. 'label' => 'Adres:',
  3. 'required' => true,
  4. 'filters' => array('StringTrim')
  5. ));


Wyglądający w html'u tak:

  1. <dt id="address-label">
  2. <label for="address" class="required">Adres:</label>
  3. </dt>
  4. <dd id="address-element">
  5. <textarea name="address" id="address" rows="24" cols="80"></textarea>
  6. </dd>


To spokojnie moge go wypelnic treścią za pomocą jQuery:

  1. $('#address').html('Tresc ktora pojawi sie w textarea');


Natomiast nie moge wypelnic elementu:

  1. $company = $this->createElement('select', 'company', array('label' => 'Firma:'));
  2. $company->setRequired(false);
  3. $company->addMultiOption('0', '-- wybierz --');
  4. $this->addElement($company);


kodem:

  1. $('#company').html('<option value="1" label="1">Pierwsza firma</option>');


Natomiast jesli recznie w pliku szablonu wpisze kod ktory generuje zend form dla elementu select (czyli sam sobie recznie takiego selecta utworze) to moge go wypelnic za pomoca tej skladni jQuery.

Czy ktos z was jest w stanie okreslic, gdzie lezy problem?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
batman
post
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Pokaż źródło wygenerowanego select-a.
Spróbuj użyć funkcji append w jQuery do dodania opcji.
Go to the top of the page
+Quote Post
Skyline
post
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 25.07.2007

Ostrzeżenie: (0%)
-----


  1. <dt id="company-label">
  2. <label for="company" class="required">Firma:</label>
  3. </dt>
  4. <dd id="company-element">
  5. <select id="company"></select>
  6. </dd>


Jak wkleje to recznie w plik widoku to dziala, jak generowane przez zend form <?= $this->form->company; ?> to nie działa.

Ten post edytował Skyline 27.10.2009, 15:32:00
Go to the top of the page
+Quote Post
batman
post
Post #4





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Sprawdziłeś, czy działa append? Jeśli nie, to sprawdź.
Następnie sprawdź takie coś:
[JAVASCRIPT] pobierz, plaintext
  1. alert($("#company").length);
[JAVASCRIPT] pobierz, plaintext
a na koniec sprawdź, czy nie masz nic w konsoli błędów.
Go to the top of the page
+Quote Post
Skyline
post
Post #5





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 25.07.2007

Ostrzeżenie: (0%)
-----


  1. alert($("#company").length);
wyswietla 0, append nie dziala :/
Go to the top of the page
+Quote Post
batman
post
Post #6





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Skoro wyświetla 0, to znaczy, że nie ma takiego elementu. Sprawdź czy nie masz jakichś błędów w konsoli oraz czy wykonujesz kod javascript po wyświetleniu select-a lub w zdarzeniu ready.
Go to the top of the page
+Quote Post
Skyline
post
Post #7





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 25.07.2007

Ostrzeżenie: (0%)
-----


Bledow w konsoli nie ma. Dodawanie options odbywa sie po wyswietleniu formularza, za pomoca zdarzenia onkeyup przy jednym z pol formularza.
Go to the top of the page
+Quote Post
seth-kk
post
Post #8





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

Ostrzeżenie: (0%)
-----


pokaz calosc - wtedy bedziemy mogli znalezc blad zamiast zgadywac gdzie moze byc
Go to the top of the page
+Quote Post
Skyline
post
Post #9





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 25.07.2007

Ostrzeżenie: (0%)
-----


Kod php formularza:

  1. class Infolinia_Form_ClientAdd extends Zend_Form
  2. {
  3. public function __construct()
  4. {
  5. parent::__construct();
  6. $this->init();
  7. }
  8.  
  9. public function init()
  10. {
  11. $this->setMethod('post');
  12. $this->setAttrib('id', 'AddForm');
  13. $this->addElementPrefixPath('BB_Validate', 'BB/Validate/', 'validate');
  14.  
  15. $this->addElement('text', 'name', array(
  16. 'label' => 'Imię:',
  17. 'required' => true,
  18. 'filters' => array('StringTrim'),
  19. ));
  20.  
  21. $this->addElement('text', 'surname', array(
  22. 'label' => 'Nazwisko:',
  23. 'required' => true,
  24. 'filters' => array('StringTrim'),
  25. 'attribs' => array('onkeyup' => 'lookup();')
  26. ));
  27.  
  28. $this->addElement('text', 'companyname', array(
  29. 'label' => 'Nazwa firmy:',
  30. 'required' => false,
  31. 'filters' => array('StringTrim'),
  32. 'attribs' => array('onkeyup' => 'lookupCompany();')
  33. ));
  34.  
  35. $company = $this->createElement('select', 'company', array('label' => 'Firma:'));
  36. $company->setRequired(false);
  37. $company->addMultiOption('0', '-- wybierz --');
  38. $this->addElement($company);
  39.  
  40. $this->addElement('submit', 'submit', array(
  41. 'ignore' => true,
  42. 'label' => 'Dalej',
  43. ));
  44. }
  45. }



Wygenerowany kod formularza wygląda tak:

  1. <form id="LoginForm" enctype="application/x-www-form-urlencoded" method="post" action="">
  2. <dl class="zend_form">
  3. <dt id="companyname-label">
  4. <label for="companyname" class="optional">Nazwa firmy:</label>
  5. </dt>
  6. <dd id="companyname-element">
  7. <input type="text" name="companyname" id="companyname" value="" onkeyup="lookupCompany();" />
  8. </dd>
  9. <dt id="company-label">
  10. <label for="company" class="optional">Firma:</label>
  11. </dt>
  12. <dd id="company-element">
  13. <select name="company" id="company">
  14. <option value="0" label="-- wybierz --">-- wybierz --</option>
  15. </select>
  16. </dd>
  17. <dt id="name-label">
  18. <label for="name" class="required">Imię:</label>
  19. </dt>
  20. <dd id="name-element">
  21. <input type="text" name="name" id="name" value="" />
  22. </dd>
  23. <dt id="surname-label">
  24. <label for="surname" class="required">Nazwisko:</label>
  25. </dt>
  26. <dd id="surname-element">
  27. <input type="text" name="surname" id="surname" value="" onkeyup="lookup();" />
  28. </dd>
  29. <dt id="submit-label">&nbsp;</dt>
  30. <dd id="submit-element">
  31. <input type="submit" name="submit" id="submit" value="Dalej" />
  32. </dd>
  33. </dl>
  34. </form>
  35.  


Funkcja odpowiedzialna za dodanie <options>:

  1. function lookupCompany()
  2. {
  3. $('#company').html('<option value="1" label="1">Pierwsza firma</option>');
  4. } // lookup
Go to the top of the page
+Quote Post
batman
post
Post #10





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Na początek wywal z Twojej klasy to:
  1. public function __construct()
  2. {
  3. parent::__construct();
  4. $this->init();
  5. }
Powinno pomóc.
Go to the top of the page
+Quote Post
Skyline
post
Post #11





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 25.07.2007

Ostrzeżenie: (0%)
-----


Nic to nie zmienia...
Go to the top of the page
+Quote Post
batman
post
Post #12





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Jeśli to nie pomogło, to nie wiem gdzie może być problem. Wrzuć stronę na jakiś hosting, by można było zobaczyć to na żywo.
Go to the top of the page
+Quote Post
xajart
post
Post #13





Grupa: Zarejestrowani
Postów: 141
Pomógł: 1
Dołączył: 2.12.2008

Ostrzeżenie: (0%)
-----


Może przeprowadz sobie wstępną diagnostykę, na początek podgląd drzewa DOM. Potem za pomocą alertu wyświetlić wartość jaka zostaje wybrana z selecta. Choćby po to by sprawdzić czy poprawnie się do niego odwołujesz. A potem wprowadz nową wartość do selecta i sprawdz na drzewku DOM co się dzieje. 

poza tym pisząc w ten sposób:

Kod
$('#company').html('<option value="1" label="1">Pierwsza firma</option>');


zastępujesz już istniejący wpis o wartości 0. 
jak kolega wcześniej pisał należy użyć append by dodać kolejną:
Kod
$('#company').append('<option value="1" label="1">Pierwsza firma</option>');



Na czystym HTML + JS to działą bez problemu, zaś na kodzie frameworka który masz podany wyżej nie sprawdzałem - bo teraz nia mam na to czasu. Może wieczorem jak wróce to sprawdze. 

Sprawdz sobie skrypt pod kątem identyfikatorów oraz pod katem innych plików JS czy nie ma jakiś konfliktów.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 03:54