2010-07-22 8 views
5

W iPadzie Safari zaprogramowałem zdarzenia dotykowe DIV, aby po dotknięciu wewnątrz DIV i przytrzymaniu tam palca przez 500   ms, zmieni się kolor tła DIV.Czy zdarzenia dotyku nie działają z elementami wprowadzania tekstu w iPadzie Safari?

Kiedy próbuję przenieść kod do elementu wprowadzania tekstu (wewnątrz zestawu pól), czyniąc go celem dotykowym zamiast DIV, kod nie działa. Tekst-input zostaje wybrany na przekór tym CSS:

input[type=text] {-webkit-touch-callout:none; -webkit-user-select:none } 

Czy nie ma sposobu, aby przechwytywać zdarzenia naciśnięcie jednego elementu tekstowego-input w iPadzie Safari i obsługiwać je w niestandardowy sposób, zapobieganie domyślne zachowanie? Czy jest coś dodatkowego, co muszę zrobić, aby uzyskać dane wejściowe na poparcie tego? Próbowałem z i bez manekina obsługi kliknij: onclick = "void (0)".

To jest dokument, który obserwuję dokumentację: Handling Events.

Odpowiedz

1

Byłoby pomocne, gdyby opublikowałeś swój kod, ale myślę, że prawdopodobnie musisz po prostu zapobiec domyślnemu zachowaniu na wydarzeniach dotyku. Wygląda to mniej więcej tak, gdy przy użyciu jQuery:

$("#ID") 
     .bind("touchstart", 
      function (e) { 
       e.preventDefault(); 
       //do something 
      }) 
     .bind("touchmove", 
      function (e) { 
       if (e.preventDefault) { 
        e.preventDefault(); 
       } 
       //do something 
      }); 
1

spróbować wyłączyć i zrobić wejście tylko do odczytu:

<input type="text" readonly /> 
+0

Potrzebuję wejścia, aby zaakceptować wprowadzanie tekstu. – Tim

1

Jeśli nie zadzwonić preventDefault() w kodzie programu obsługi, przeglądarka automatycznie przekazać dotknij zdarzenia do domyślnej implementacji (po tym, jak myślisz, że sobie z tym poradziłeś). Domyślną implementacją jest wybranie pola.

W takim przypadku zadzwoń pod numer preventDefault() i stopPropagation() w programie obsługi, a następnie zwróć wartość false. Zapobiega to dalszemu bulgotaniu. Wtedy możesz całkowicie kontrolować swój element wejściowy.

Zastrzeżenie: utracisz także domyślne zachowanie pola wejściowego! Innymi słowy, nie będziesz mógł wprowadzać tekstu na pole! Lub jeśli pole wejściowe to <select>, nie będzie można podciągnąć listy itp.

Przypuszczam, że tak naprawdę chcesz: 1) Jeśli użytkownik naciśnie i przytrzyma przez 500ms, a następnie zmieni kolor na żółty, 2) i/lub przy zwolnieniu aktywuj pole wejściowe. W takim przypadku będziesz musiał ręcznie odnawiać zdarzenie w górę, jeśli naprawdę chcesz użyć pola wejściowego.

Tego rodzaju sytuacja jest bardzo powszechna podczas programowania iPada. Na przykład w wielu przypadkach chciałbyś wykryć ruch przeciągnięcia dotykowego (nawet w polu wejściowym) i zinterpretować go jako ruch, ale zinterpretować ruch zwolnienia dotykowego (bez ruchu) jako kliknięcie, aby aktywować pole wejściowe . Musisz zrobić to, co sugeruję powyżej: preventDefault() i, jeśli to konieczne, polecam wydarzenie.

+0

Dzięki za odpowiedź. Tak, potrzebuję wejścia, aby zaakceptować wejście jak normalne wprowadzanie tekstu. Chcę utworzyć menu kontekstowe na wejściach, aby wyświetlić znaki, których nie ma w wbudowanych menu kontekstowych klawiatury wirtualnej, np. Gdy przytrzymasz palec przez chwilę, np. [A] otrzymasz wyskakujące okienko pokazując odmienne formy litery [a] - akcentowane, umlaute-a, itp. Muszę dać użytkownikowi możliwość wprowadzenia wariantów wariantów liter [d] i [t], których Apple nie zamieścił na swoim wirtualnym klawiatura. Ale użytkownik nie zawsze musi to robić - tylko wtedy, gdy ma to zastosowanie. – Tim

+0

@Tim, w takim przypadku będziesz musiał pułapkę (to znaczy zapobiegać blokowaniu i zatrzymaniu) na dotknięciu dotykowym, dotknięciu i touchend. Następnie decydujesz, czy jest to kliknięcie (tj.pochodzenie na touchstart jest bliskie touchend). Jeśli jest to kliknięcie, czas to (tj. Czas na touchend - dotykowy). Jeśli czas jest krótki, odśwież wydarzenie jako normalny onclick w górę do DOM. Jeśli czas jest długi, rób swoje szczególne rzeczy. –

+0

dzięki jeszcze raz. Muszę zachować informacje o selekcji (tj. SelectionStart i selectionEnd), aby znak wybrany z menu kontekstowego dołączonego do textinput mógł zostać wstawiony we właściwej lokalizacji. Użytkownik wpisuje słowo, które potrzebuje znaku specjalnego, którego nie ma na wirtualnej klawiaturze, i może próbować wstawić znak zamiast dodawać go lub zastąpić wybrany tekst znakiem. – Tim

Powiązane problemy