Mam formularz wyszukiwania, który ma w nim różne elementy, wybory wyboru, pola tekstowe itp. Każda zmiana towarzyszy połączenie AJAX, który otrzymuje liczbę wyników jako rodzaj licznika. Chciałbym zresetować tylko poprzedni element, który spowodował, że licznik zwrócił wartość 0.

Myślałem o śledzeniu każdej zmiany zmiennej, a za każdym razem, gdy licznik ocenia 0, a następnie zresetowałbym element, który spowodował zmianę. Nie obawiam się jednak, że może to zmusić mnie do radzenia sobie z różnymi elementami z wielu elementów z dużą ilością kodu i skakania wokół.

Czy istnieje możliwe bardziej eleganckie rozwiązanie problemu, o którym każdy może myśleć? Byłbym wdzięczny za pomoc.

0
Awemo 4 wrzesień 2012, 18:31

3 odpowiedzi

Najlepsza odpowiedź

Rozwiązałem problem, rejestrując każdą zmianę formularza

$("#form_id").on("change", function(event) {
  //Event bubbling
  type = $(event.target).get(0).type;
  selector = $(event.target);
}

Następnie przy użyciu wzoru projektowania strategii (wzór projektowania strategii JavaScript), ja Zresetuj odpowiednio każdy możliwy typ pola. Przykład dla pola tekstowego,

var Fields = {
  "text": {
    resetAction: function(fieldSelector) {
      fieldSelector.val('');
    }
  }
};

//To call the reset action for the type of field,
Fields[type].resetAction(selector);

Musiałem wywołać zdarzenie zmienne dla ukrytych pól, aby również bańka ich zmiany.

0
Awemo 6 wrzesień 2012, 15:12

Nie mogę skomentować Twoje pytanie, ale: Jeśli rozumiem prawidłowo, istnieje duża forma, a każda zmiana na elemencie każdy , wyzwala połączenie AJAX, które zwraca wynik.

Jeśli ten rozmiar zestawu jest zero, chcesz, chcesz zresetować formularz do poprzedniej wartości.

Oznaczałoby to, że tylko ostatnia zmieniona wartość musi być śledzona i zresetować?

W tym przypadku wywołanie wyroku {X0}} powinna użyć wartości this, aby uzyskać bieżącą wartość elementu formularza i identyfikator. Następnie, jak wraca do zestawu, ustaw przechowywaną wartość do tego elementu, jeśli nie ma wierszy.

W przeciwnym razie, jeśli formularz jest zarządzany na całym świecie, zawsze można przechowywać go za pomocą połączenia .clone(), a następnie .remove() go i .insert() klon z powrotem, jeśli wynik jest pusty.

PS: Wiem, że to rozwiązanie nie jest naprawdę eleganckie :)

1
Pandaiolo 4 wrzesień 2012, 14:56

Twój moduł AJAX mógł zwrócić sznurk kodowany JSON z danymi powodującymi wystąpienie tego zdarzenia (funkcja PHP: JSON_ENCODE) i stamtąd można przenikać przez błędne wartości resetowania ich i wyświetlania dalszych informacji. tj. "Twój e-mail wydaje się być nieprawidłowy".

PHP: patrz JSON_ENCODE JavaScript: Zobacz GetElementsByTagname ("Wejście") (lub Textlai lub SELECT) Uwaga: W przypadku wybranego elementu można raczej chcesz zmienić atrybut "SelectIndIndex" niż "Wartość".

0
Chris S. 4 wrzesień 2012, 14:36