Nawigacja po formularzach

0

Wie ktoś może jak zrobić nawigację po formularzu?

Chodzi mi o przejścia po między polami np za pomocą strzałek, albo przejście do wiersza niżej za pomocą spacji etc.

W czym mogę to zrobić? Czego szukać?

Znalazłem w jquery autotabbing, jest całkiem fajny, ale to jeszcze nie to :( Czy zna ktoś lub korzysta z podobnych pluginów?

0

Samemu mozna to napisac korzystajac z jQuery jest dosc proste:

$(':input').keydown(function(e)
{
    keyCode = e.keyCode || window.event.keyCode;

    if (keyCode == XX) // XX to znak w kodzie ASCII -- np. znak ASCII odpowiadajacy strzalce w lewo
    {
        $(this).next(':input').focus();
    }
    // else if ... i tak dalej, i tak dalej...
});

Oczywiscie fragment pisany z palca...

0

To pobieranie keyCode z window.event nie jest nawet konieczne, gdy używa się jQuery. Normalnie używa się tego żeby uwzględnić IE, które nie przekazuje poprawnego parametru do funkcji obsługi zdarzenia, tylko udostępnia informacje o zdarzeniu w globalnym obiekcie window.event. Ale jQuery uwzględnia to za nas i zapewnia nam parametr nawet w IE. jQuery zaleca też używać evt.which, a nie evt.keyCode (źródło: http://api.jquery.com/event.which/)/

Tym, co lubią przeklejać przykładowe rozwiązania zwrócę uwagę, że zawsze można (i powinno się) używać własnej mózgownicy. Np. jeśli obsługujemy naprawdę wiele klawiszy (4 strzałki + spacja to już pięć, a jest jeszcze "etc."), to żeby uniknąć powtórzeń można wprowadzić sobie zmienną $elementToFocus. Można też rozważyć użycie switcha, który ułatwi podstawianie kilku klawiszy do jednej funkcjonalności. To są kwestie zależne od konkretnego przypadku, których nie sposób uwzględnić pisząc komuś przykładowy szablon kodu. Natomiast prawie zawsze polecam używanie (pseudo)stałych dla określenia numerów klawiszy -- dla przejrzystości. Można je wyciągnąć poza funkcję obsługi zdarzenia, co zwiększyłoby nieco wydajność.

$(':input').keydown(function(evt)
{
        var KEY_SPACE       = 32,
            KEY_LEFTARROW   = ileśtam,
            KEY_RIGHTARROW  = szambernaście,
            ...
            $currentElement = $(this)
            $elementToFocus
        ;
        switch (evt.which) {
        case KEY_LEFTARROW:
                $elementToFocus = $currentElement.next(':input');
                break;
        case KEY_RIGHTARROW:
                $elementToFocus = $currentElement.prev(':input');
                break;
        case KEY_DOWNARROW:
        case KEY_SPACE:
                ...
                break;
        ... 
        // milion innych opcji
        }
        if ($elementToFocus) { 
                $elementToFocus.focus();
        }
});

(ostrzegam, że też to pisałem z palca :P)

0

hmm... ok, dziękuję za podpowiedzi. Ogólnie fakt podane tu kody nie działają, a szkoda :D ale wiem czego szukać :d

już powpisywałem odpowiednie wartości w kodzie ASCII :pale na razie kod nie chodzi, szukam rozwiazania...

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0