AJAX form focus

vmiklos képe

Sziasztok!

Elég speciális problémám lenne és hosszas kutatás után sem találtam rá a megoldást.

Adott egy AJAX-os form D7-ben. Ez egy "értékesítési" form, melynek egy sorában szerepel, hogy hány darabot szeretnék eladni egy adott termékből, a termék vonalkódja és a vonalkód alapján az adatbázisból kiolvasott tulajdonságok, (név,tulajdonság,ár) melyek nem módosíthatóak.

form

A form jelenleg úgy van kialakítva, hogy egy vonalkód kitöltése után automatikusan új sort ad hozzá.

Az elvárt működés az lenne, hogy az oldal betöltése után az első (és egyetlen) sorban lévő vonalkód mezőben áll a kurzor. A vonalkód bevitele után egy tab-ot nyomva létrejön egy új sor és abban a vonalkód mezőre áll át. Minden sorban automatikusan 1 szerepel a darabszámnál, de átírás és egy tab után az azonos sorban lévő vonalkód mezőre kellene ugrania a kurzornak.

Azt, hogy az oldal betöltése után a kurzor a vonalkód mezőben legyen megoldottam a következő kóddal:

  1. if(!empty($form_state['values']['vkod'])){
  2. ...
  3. }else{
  4. $form['js'] = array(
  5. '#markup' => '<script type="text/javascript">document.getElementById("edit-vkod").focus();document.getElementById("edit-vkod").select();</script>',
  6. );
  7. }

A problémáim, melyekben a segítségeteket szeretném kéni a következőek:

  • Ha bármelyik mezőben tab-ot nyomok, akkor nem a következő mezőre ugrik a kurzor, hanem "elveszik" a focus.
  • Amikor új sor keletkezik egy vonalkód bevitele után, akkor hogyan lehet ráállni egy olyan mezőre, ami még csak akkor fog létrejönni?

Gondolom ezt is valami javascript varázslattal lehetne megoldani, de sajnos nem értek hozzá. Remélem sikerült érthetően leírni a problémámat és tud majd valaki segíteni a megoldásában is.

Drupal verzió: 
pp képe

Szia használd az #attached tulajdonságot inkább.

A tab sorrendet az #attribut tulajdonság tabindex tulajdonságával tudsz megadni.

  1. $form['elsoelem']['#attributes']['tabindex'] = 1;
  2. $form['masodikelem']['#attributes']['tabindex'] = 2;
  3. $form['harmadikelem']['#attributes']['tabindex'] = 3;

A második kérdésre a válasz egyszerű: Hogyan különbözteted meg az új sort? Az egy css kiválasztó lesz, és annak a segítségével tudsz ráállni:

  1. $('kivalaszto').focus();

(ha a fenti módon adod hozzá a js-t akkor fog működni, mert a Drupal biztosan betölti a jQuery-t)

Ajánlom: https://drupal.org/node/304258
Vagy ha időd engedi: https://drupal.org/node/751740

pp

4
0
vmiklos képe

Köszönöm a választ. Megcsináltam amiket írtál és látom is, hogy jó lenne a dolog, mert oda ugrik a kurzor ahova kellene. Azonban amikor bejön a throbber akkor eltűnik. Próbáltam azt is, hogy kikapcsolom, de nem segített.

0
0
pp képe

Kód és mintaoldal nélkül nehéz segíteni.

A logikád valahogy úgy kéne, hogy működjön, hogy leküldöd az új sort, aminél az első elemre ráteszel egy "focustIde" class-t. A js erre dobja a focust és egyúttal el is távolítja a class-t. (hogy a következő betöltődő sorra tudjon majd mutatni a kiválasztó)

Ha ezt a függvényt a Drupal.behaviors-ba teszed (mint ahogyan ezeket oda kéne tenni) akkor a Rendszer ezt minden Ajax hívás után meghívja, tehát az új sorokra rákerül a focus.

pp

2
0