Van -e js a form elküldés után?

Dahar képe

Sziasztok!
Egy olyan problémával küzdök hogy egy node beküldő formom, og_node_form.
Hozzáadtam egy egy saján javascriptet modullal:

function wwmap_form_alter(&$form, &$form_state, $form_id) {
      if  ($form_id=='og_node_form'){
        drupal_add_js(drupal_get_path('module', 'wwmap') . '/wwmap.js');
      }
}

Drupal.behaviors.wwmap = function(context) {
 
 
                 $("#edit-field-hely-0-city").val($("#edit-field-locality-tids-hierarchical-select-selects-1 option:selected").html());
                   console.log('vvv');
                });
}

Ebben van egy jquery click esemény a submit gombra, ami működik is mindaddíg míg valaki hibásan küldi be a formot mert amikor visszadob a drupal a validásás után onnantól kezdve nem működik.

Tudna ebben segíteni valaki, hogy mit kellene másképp csinálnom hogy rendesen működjön?

Előre is köszönöm.

Drupal verzió: 
Sk8erPeter képe

Konzolon (F12, Ctrl+Shift+I) látszik valami hiba?
A kódodban meg ebben a formában szintaktikai hiba van, bár lehet, hogy csak a click esemény lezárásaként maradt ott a });, és ide csak a lényeget másoltad be.
Ettől függetlenül az értékek felhasználása előtt nem árt leellenőrizni az elemek meglétét, pl. ezt is kiírathatnád console.log-ra, csak példakóddal:

console.log( $("#edit-field-locality-tids-hierarchical-select-selects-1 option:selected").length );
if($("#edit-field-locality-tids-hierarchical-select-selects-1 option:selected").length > 0){
  // itt már használhatod az értékét...
}

A lényeg, hogy a validálás után csekkold le, hogy egyáltalán léteznek-e az elemek az oldalon, van-e konzolon hiba, stb.
Ja, meg most látom, hogy használod a :selected selectort. Biztos lehetsz benne egyáltalán, hogy valamelyik elem ki lesz választva?
Nem látom a markupodat meg a kódod egyéb részét, úgyhogy ezeket nem ártana tudni.

0
0
Dahar képe

Igen csak a lényegi részét másoltam be a kódnak itt az egész.

Drupal.behaviors.wwmap = function(context) {
    /*   $("#edit-field-hely-0-postal-code-wrapper").css("display","none");
       $("#edit-field-hely-0-city-wrapper").css("display","none");
       $("#edit-field-hely-0-street-wrapper").css("display","none");
       $("#edit-field-irsz-0-value").keyup(function() {
       $("#edit-field-hely-0-postal-code").val($("#edit-field-irsz-0-value").val());
 
        });
        $("#edit-field-st-hn-0-value").keyup(function() {
          $("#edit-field-hely-0-street").val($("#edit-field-st-hn-0-value").val());
 
        });
*/
        $("#edit-submit").click(function() {
          //   $("#edit-field-hely-0-postal-code").val($("#edit-field-irsz-0-value").val());
          //   $("#edit-field-hely-0-street").val($("#edit-field-st-hn-0-value").val());
         //    $("#edit-field-hely-0-city").val($("#edit-field-locality-tids-hierarchical-select-selects-1 option:selected").html());
               console.log('vvv');
        });
}

A hiányzó változók hibáinak kikerülése érdekében szinte mindent kikommenteztem egyedül a click eseményt nem.
Az a fura hogy amúgy minden más végrehajtódik a validálás után is csak a click esemény nem.
Lehet hogy akkor amikor betöltődik a js akkor még nincs meg a submit gomb vagy mi lehet a baja?

Nincs amúgy hibaüzenet, és már csak a colnsol.log parancs van ami első körben működik is de ha visszadob az oldal hibákkal akkor utána már nem.

0
0
Sk8erPeter képe

Ha a submit esemény bekövetkezik, akkor már küldi is a form tagnél megadott metódussal az adatokat az action attribútumnál megadott feldolgozó fájl felé.
Itt kérdés, hogy máshol pongyolán fogalmazva "megállítod-e" ezt a lap-újrafrissítős mechanizmust a böngészőnél, és mondjuk AJAX-szal küldöd-e tovább az adatokat.
JavaScripttel teljesen felülbírálhatod a form default "viselkedését", de ha kiszámíthatóvá akarod tenni, hogy még a form elküldése előtt milyen JavaScript-kód jusson egyáltalán érvényre, akkor azt annak megfelelően kell intézned.

Mi a célod?
Az, hogy egy esemény mindenképpen bekövetkezzen a form elküldése előtt? Ha így szeretnéd, akkor a submit gombra való click eseményre kötött függvénynél return false;-szal (meg létezik event.preventDefault()) kell visszatérni, hogy ne frissüljön az oldal; de előtte megcsinálni, amit még szeretnél, hogy bekövetkezzen a click eseményre - ha viszont utána mindenképp szeretnéd mégis elküldetni a formot, akkor callback-ként még mindig megadhatod azt, hogy a form legyen elküldve submit()-tel.

Szóval mit szeretnél?

0
0
aruna képe

talán segíthet:

http://stackoverflow.com/questions/570960/how-to-debug-javascript-jquery...

Pl. ez érdekesnek látszik: http://www.sprymedia.co.uk/article/Visual+Event

Az engem is érdekelne, hogy meg lehet-e nézni a felülírt eseménykezelőket valamilyen módszerrel, hasonlóan, ahogy a firebug is mutatja, a felülírt css szabályokat.

0
0
Dahar képe

Helló!

Nem próbáltam ki ezt a debug cuccot de majd lehet hogy egyszer megteszem.
Köszönöm a hozzászólásokat.
Az volt acélom hogy egy legördülő mező értékét belmásoljam egy text mezőbe.

Végülés 2 dolgot változtattam:
másképp deklaráltam a js fájlt ez abban segített hogy a js fájl validálás után is fusson:

function wwmap_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch ($op) {
      case 'validate':
          drupal_add_js(drupal_get_path('module', 'wwmap') . '/wwmap.js');
         break;
      case 'prepare':
          drupal_add_js(drupal_get_path('module', 'wwmap') . '/wwmap.js');
         break;
  }
 
}

A clink esemény viszont nagyon fura mert a js minden része, click esemény is futott míg nem tért vissza a form hibával. Amikor visszatért akkor is futott a js de a click esemény már nem. Ez akkor gyógyult meg mikor módosítottam a selectort erről:

$("#edit-submit")

erre:

$("input#edit-submit")

Talán más is kapott valami ilyen id-t vagy nem tudom, de lényeg hogy egyből megjavult.

Mégegyszer köszönöm mindenkinek!

0
0
silversk8r képe

jó, hogy megjavult :)
annyival kiegészítem, hogy ne a submit gomb onClick-jét figyeld, mert a formot úgy is el lehet küldeni, hogy egy mezőjében enter-t nyomsz.
De van erre egy submit esemény, inkább azt figyeld:
http://api.jquery.com/submit/

0
0