2012-04-11 17 views
1

Ich fange an, etwas Javascript für meine Website zu schreiben, um eine bessere Benutzererfahrung zu erstellen, aber ich bin ein wenig verwirrt darüber, was genau passiert, und vielleicht ist es klar, jemand anderes was ich mache ich falsch oder vermisse es. Ich habe zwei JavaScript-Funktionen, die nach der ersten Verwendung perfekt funktionieren und wenn Sie es langsam verwenden (manchmal überspringt es das nächste Element und wählt nichts aus, wenn Sie zwei Tasten zu schnell drücken). Ich habe das Gefühl, dass mir eine Art $ (Dokument) fehlt .ready (function() {}); Implementierung, um sicherzustellen, dass jeder Prozess abgeschlossen ist, bevor es weitergeht. Ich habe zwei Textfelder, die der Benutzer in zwei Zahlen einträgt, dann geht es weiter zum nächsten Tab-Element (dem nächsten Textfeld). Die Textfelder befinden sich auch in einem asp.net-Update-Panel, wenn dies Auswirkungen hat.Javascript/Jquery einfache Benutzererfahrung Funktionen

function selectall(item) { 
      $(item).focus().select(); 
    }; 

    function selectNext(textBox) { 
     if ($(textBox).val().length == 2) { 
      $(textBox).next().focus().select(); 
     } 
    }; 

     <asp:TextBox ID="Text1" runat="server" Width="30px" AutoPostBack="True" onkeyup="selectNext(this);" onclick="selectall(this);" 
    Height="20px"></asp:TextBox>: 
       <asp:TextBox ID="Text2" runat="server" Width="30px" AutoPostBack="True" onkeyup="selectNext(this);" onclick="selectall(this);" 
    Height="20px"></asp:TextBox> 
       <asp:DropDownList ID="Text2" runat="server" 

Antwort

0

Warum müssen Sie die Textfelder in einem UpdatePanel enthalten?

Es ist möglich, dass das AutoPostback, das Sie in Ihren Textfeldern festgelegt haben, Probleme mit Ihrem jQuery verursacht, da ein Seitenhintertreten immer dann stattfindet, wenn das TextBox-Steuerelement den Fokus verliert.

Ich würde Ihre Textfelder aus Ihrem UpdatePanel entfernen, entfernen Sie die AutoPostback und legen Sie Ihr JavaScript in eine document.ready.

bearbeiten

Code-Snippet:

$(document).ready(function() { 
    $("#fname").keyup(function() { 
     selectNext($(this)); 
    }); 

    $("#fname").focus(function() { 
     $(this).select(); 
    }); 

    $("#lname").keyup(function() { 
     selectNext($(this)); 
    }); 

    $("#lname").click(function() { 
     $(this).select(); 
    }); 
}); 

function selectNext(textBox) { 
    if (textBox.val().length == 2) { 
     setTimeout(function() { 
      textBox.next().focus().select(); 
     }, 5); 
    } 
} 
+0

Diese Textfelder in einem Update-Panel sind, weil es Teil eines Jquery Dialog Pop-up für einige Benutzereingaben an den Server senden muss wieder einige füllen Daten in C# -Funktionen, bevor sie für den Benutzer geladen werden. Also beginnen diese Textfelder mit zwei Zahlen. Vielen Dank für den Hinweis auf die Autopostback, die ich hatte, löste das erste Problem, wo es nicht das erste Mal funktionieren würde, aber wenn Sie noch den Schlüssel hochheben, wird es über das nächste Textfeld überspringen. – Marrs

+0

Ich sollte auch erwähnen, ich benutze die .blockui-Funktion, um die Seite zu sperren, bis sie auf dieses Dialogfeld Pop-up div reagieren und klicken Sie auf Senden oder Abbrechen. und wenn ich $ (Dokument) .ready (function() {}); Um meine Funktionen herum sagt die Google Konsole, dass sie diese Skriptfunktionen nicht finden kann. – Marrs

+0

Ich glaube, dieses Skipping-Problem hat etwas mit dem onkeyup-Ereignis zu tun, weil es möglicherweise in das nächste Feld wechselt, bevor Sie den Schlüssel vollständig freigeben? Auslösen der nächsten Textfelder Key-up-Ereignis? also irgendwie das gleiche Key-up-Ereignis für beide Textfelder? ist meine beste Schätzung – Marrs

Verwandte Themen