Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jQuery $().submit()
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
foxbond
<Dostaję już wścieku>

  1. $("#fieldDataForm").submit(function(e){
  2. $(this).preventDefault();
  3. e.preventDefault();
  4. e.returnValue = false;
  5.  
  6. var x = $("#fieldEditSubmit").data('fieldX');
  7. var y = $("#fieldEditSubmit").data('fieldY');
  8. var actField = $('#field_'+x+'_'+y);
  9.  
  10. //reset
  11. actField.removeClass();
  12. actField.addClass("field");
  13. matrixUpdateField[x][y] = 0;
  14.  
  15. var id = $("#fieldDataObjectId").val();
  16.  
  17. if ($("#fieldEditSubmit").data('radio') == 'fieldEditCollision'){
  18. actfield.addClass("fieldCollision");
  19. matrixUpdateField[x][y] = {"collision":1};
  20. }else if ($("#fieldEditSubmit").data('radio') == 'fieldEditObject'){
  21. actfield.addClass("fieldObject");
  22. matrixUpdateField[x][y] = {"object":1,"id":id};
  23. }else if ($("#fieldEditSubmit").data('radio') == 'fieldEditMonster'){
  24. actfield.addClass("fieldMonster");
  25. matrixUpdateField[x][y] = {"monster":1,"id":id};
  26. }else if ($("#fieldEditSubmit").data('radio') == 'fieldEditNPC'){
  27. actfield.addClass("fieldNPC");
  28. matrixUpdateField[x][y] = {"npc":1,"id":id};
  29. }else{
  30. actfield.addClass("none");
  31.  
  32. }
  33.  
  34. //alert("ok");
  35. return false;
  36. });


Mam problem z powyższym kodem, a mianowicie pomimio zwracania "false" formularz i tak zostaje wysłany co skutkuje przeładowaniem strony.
Poniżej umieszczam również kod formularza

  1. <div id="fieldEdit">
  2. <form action="" method="" id="fieldDataForm">
  3. <img id="fieldEditNothing" class="toggler" src="images/redbut.png"> Nic<br>
  4. <img id="fieldEditCollision" class="toggler" src="images/redbut.png">Kolizja <span tip="Niektóre obiekty mogą mieć kolizje nawet jeśli to pole nie jest zaznaczone" style="color:red;">[?]</span><br>
  5. <img id="fieldEditObject" class="toggler" src="images/redbut.png">Obiekt<br>
  6. <img id="fieldEditMonster" class="toggler" src="images/redbut.png">Potwór<br>
  7. <img id="fieldEditNPC" class="toggler" src="images/redbut.png">NPC<br>
  8. <span id="fieldDataObjectIdContainer" style="display:none;">Podaj id: <input type="text" id="fieldDataObjectId" value="" size="2"></span><br>
  9. <input id="fieldEditSubmit" type="submit" value="Zapisz"></form>
  10. </div>


Z góry dziękuję za pomoc
tolomei
Witaj.

Generalnie to wystarczy dać e.preventDefault() na początku funkcji - tak jak zrobiłeś.
Domyślam się, że nie objąłeś wszystkiego funkcją "document ready":

[JAVASCRIPT] pobierz, plaintext
  1. // wersja dłuższa
  2. $(document).ready(function(){
  3. // kod do wykonania
  4. });
  5.  
  6. // wersja krótsza
  7. $(function(){
  8. // kod do wykonania
  9. });
[JAVASCRIPT] pobierz, plaintext


Jeśli umieścisz wszystko w jednym z powyższych bloków to JavaScript poczeka aż drzewo DOM zostanie załadowane w pełni, dopiero potem poszuka Twojego formularza i podepnie pod niego żądane listenery. W przeciwnym wypadku Twój formularz jest szukany zbyt wcześnie i nie zostaje odnaleziony.

Tutaj działający przykład: http://jsfiddle.net/AhmAz/

Pozdrawiam.
foxbond
Wszystko było tak jak mówisz.

[google chrome]
Problem występuje, gdy w danym bloku kodu:

Kod
$("#fieldDataForm").submit(function(e){


//cos powodujacego blad
var x = 32/0;
jakasFunkcjaPowodujacaBlad();

return false;
});


Gdy wystąpi błąd, cała funkcja nie zostanie przetworzona(?) , co powoduje nie przypisanie jej do danego formularza,
To skutkuje natomiast wywołaniem defaultowej akcji dla danego formularza.


Troszkę niezrozumiale to napisałem tongue.gif

Pozdrawiam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.