2017-01-24 7 views
0

Ich habe ein dynamisches Formular in meiner App, die live bearbeitet werden kann (Hinzufügen oder Entfernen von Eingabefeldern), aber ich hatte ein Problem bei der Validierung, wenn Benutzer einen Fehler gemacht und etwas nicht gefüllt Richtig, alle neuen hinzugefügten Felder wären weg und das war sehr schlecht, weil der Benutzer alles neu erstellen musste, wie er es vorher hatte.Ajax funktioniert ungerade auf mobilen und Touchscreen-Geräten

So zu lösen dieses Problem, das ich einen Ajax-Aufruf erstellt haben, nur um zu überprüfen, ob die Validierung ist in Ordnung:

// send ajax first to check validation so that the dynamic fields don't disappear 
$(document).on('touchstart mousedown', ':submit', function() { 
    $('input[name="items"]').val($('.item').length); 
    var form = $("form"); 
    var myMethod = ''; 
    var myRoute = ''; 
    var orderId = "<?php if (isset($order->id)) { echo $order->id; } else { echo false;} ?>"; 

    if($(this).val() === 'Make new order' && !orderId){ 
     myMethod = 'post' 
     myRoute = '/orders' 

    } else { 
     myMethod = 'post'; 
     myRoute = '/orders/edit/' + orderId; 
    } 

    $.ajax({ 
     type: myMethod, 
     url: myRoute, 
     headers: { 'X-CSRF-TOKEN': "{{csrf_token()}}" }, 
     data: form.serializeArray(), 
     dataType: 'json', 
     success: function(data){ 
      console.log('validation success!'); 
     }, 
     error: function(data) { 
      var errors = data.responseJSON; 
      var errorsArr = []; 
      for (error in errors) { 
       errorsArr.push(errors[error][0]); 
      } 
      bootbox.alert(errorsArr.join("<br>")); 
      console.log(errors); 

     } 
    }); 
}); 

und in meinem Controller ich habe dies:

public function store(OrdersForm $request) 
{ 
    if($request->ajax()){ 

     return response()->json(); 

    } else { 

     // save all... 
    } 
} 

Und das Problem ist, dass Alles funktioniert gut auf dem Computer Ich bekomme die Validierung Nachrichten für sowohl erstellen und Bearbeiten von Vorträgen, sondern auf Tablet und Mobiltelefonen alle verrückten Dinge gehen ...

Ich bekomme doppelte validati bei fehler bei create und on edit bekomme ich kurz eine validierungsmeldung und es geht weg ich weiß nicht wo ich debuggen soll ... wie kann ich sehen was auf dem handy passiert?

+0

Sie können die integrierten Entwicklungstools von Chrome verwenden, um ein mobiles Gerät zu emulieren (durch Ändern der Bildschirmgröße). Aus Ihrer Beschreibung klingt es wie Ihre Ereignisbehandlung könnte ein Problem sein. Ist Touchstart UND Mousedown notwendig? Weil AFAIK Sie einfach mousedown haben können? Dies könnte die Duplizierung erklären – zerohero

+0

Sie scheinen auch alle "Senden" -Funktionen zu überschreiben. Wenn Sie auf dieser Seite einen anderen Ajax feuern, der auch dazu führt, dass er "abschickt", wird er doppelt und seltsam agieren. eher an die Schaltfläche binden, die für das Senden verantwortlich ist? – zerohero

+1

danke für den Tipp mit Chrom Debugging ich bekomme die gleichen Probleme, aber jetzt kann ich zumindest sehen, dass – lewis4u

Antwort

1

Ihr Code wird ausgelöst, weil Sie die Übermittlungsschaltfläche auf eine normale Schaltfläche ändern müssen, und dann die Formularübermittlung manuell auslösen, wenn die AJAX-Anforderung, die Sie zur Überprüfung gesendet haben, erfolgreich zurückgegeben wird.

Verwandte Themen