• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] Swipe Event scheint immer weiter zu bestehen

huberlix

New member
Auf meiner main page (#home) habe ich eine dynamisch erstellte Tabelle. Mit folgendem Code reagiere ich auf das Swipeleft Event. Zunächst öffnet ein Dialog, dann werden diverse Werte geändert und neu gespeichert. (Es handelt sich um eine "Undo"-Funktion. Dere Wert, der vorher eingetragen wurde, wird gelöscht, und alle Werte in der Tabelle nach links verschoben).

Jedoch, wenn der Dialog schließt, öffnet er sich direkt wieder (nicht immer. Manchmal gar nicht, manchmal 10X hintereinander). Scheinbar wird das "Swipeleft" immer wieder gefeuert.

Jemand ne Idee, was da los ist?

Code:
$(document).on( "pageshow", "#home",function(event) 
    {

       $("#my-table").swipeleft(function(e) 
       {  
          var name=(e.target.parentElement.firstChild.innerHTML); // Der Name in der ersten Zelle in der Reihe
          $("#Undolabel .Undotext").text(name);  //Name in HTML-Code eintragen
          $.mobile.changePage($("#Undo"), { transition: "pop"}); //Nur ein Dialog mit Text (und dem Namen) und OK/Cancel-Buttons

       });
    }); 



    function UndoOK()  // OK-Button clicked
    {  

       var name=$("#Undolabel .Undotext").text();
       var werte=JSON.parse(localStorage.getItem(name)); //Werte von "name" lesen
       werte.shift();                       //Werte ändern
       if (werte.length<16)
       {
           werte.push("0,00");
       }
       localStorage.setItem(name,JSON.stringify(werte));   /speichern
       $("#Undo").dialog('close');   //Close Dialog
    }


    function Undocancel()   //Cancel clicked
    {  

       $("#Undo").dialog('close'); 
    }
 
Zuletzt bearbeitet von einem Moderator:
http://www.huberlix.de/xyz/

Es ist ne Website für nur ca 25 Personen.
Beim ersten mal müsst ihr einen Namen wählen. Nehmt irgendeinen.

Dann öffnet die Tabelle. Beim klick auf eine Zelle in der 2. Spalte könnt ihr einen Wert eintragen. Ist allerdings für dieses Problem unwichtig. Geht auch wenn lauter Nullen drinstehn.

Beim Swipe nach links, öffnet ein Dialog mit dem Namen der Zeile, die geswiped wurde. Klick auf OK schiebt die Werte jeweils um eine Spalte nach links, um die letzte Eintragung rückgängig zu machen.
Und dann öffnet der Dialog wieder und wieder (nicht immer)

Gruß Bernd
 
Es scheint ein Problem mit dem "OK"-Dialog zu sein. Wenn man seine Maus bewegt, nachdem man da geklickt hat, wird das anscheinend als swipe interpretiert.
 
Das gleiche passiert auch bei Cancel.
Und es passiert auch, wenn man die Maus stillhält.

Kann man das im Debugger irgendwie sehen? Wenn der Dialog geöffnet ist, kann ich im Debugger keinerlei Variablen mehr checken.
Kann man checken, durch wen, oder was der Dialog aufgerufen wird?

- - - Aktualisiert - - -

Hab jetzt mal an der roten Zeile einen Haltepunkt gesetzt.
Wenn das Popup (ungewollt) wieder kommt, wird hier nicht angehalten.
Also $.mobile.changePage($("#Undo"), { transition: "pop"}); wird eigentlich nicht ausgeführt. Woher kommt dann der Aufruf für den Dialog?:confused:



Code:
$(document).on( "pageshow", "#home",function(event) 
{

   $("#my-table").swipeleft(function(e) 
   {
	  
	  
	[COLOR="#FF0000"]var name=(e.target.parentElement.firstChild.innerHTML);[/COLOR]
	  $("#Undolabel .Undotext").text(name);
	  $.mobile.changePage($("#Undo"), { transition: "pop"});
	  	  
   });
});
 
Zuletzt bearbeitet:
Wenn du keine Werte in die Tabelle eingegeben hast, siehst du keinen unterschied. Bei einem "Swipeleft" in einer Zeile wird die Zeile nach der Abfrage um eine Zelle nach links verschoben.


Mittlerweile hab ich die Lösung, wenn ichs auch nicht verstehe:

$(document).on( "pageshow", "#home",function(event)

wurde geändert in

$(document).on( "pagecreate", "#home",function(event)

dann funktioniert es
 
Zuletzt bearbeitet von einem Moderator:
Ah... das pageshow wird anscheinend nicht nur beim Seitenaufbau gefeuert, sondern auch wenn sich die Ansicht ändert. Dadurch wird dann dar Swipe-Eventlistener zu oft registriert und damit siehst du dann den Dialog immer öfter.
 
Zurück
Oben