2012-07-13 7 views
9

Używam atrybut contenteditable na <div> w celu uczynienia go działać jako pola tekstowego na żądanie (dla użytkowników, aby zmienić nazwę czegoś). Ale chcę również włączyć na nim autofocus, aby użytkownicy mogli zacząć pisać od razu (<div> zawsze ma początkowo włączone contenteditable).Czy mogę użyć autofokusa na elemencie z contenteditable?

Czy jest to ważne i/lub możliwe? Czy będę musiał przełączyć się na standardowe wprowadzanie tekstu?

Odpowiedz

10

Będziesz musiał zrobić to z JavaScript w większości przeglądarek, tak myślę. I nie będzie działać na iOS, który pozwala tylko na programowe korzystanie z focus() w procedurze obsługi zdarzeń autentycznej interakcji użytkownika (takiej jak click lub wydarzenie związane z dotknięciem).

Należy również pamiętać, że jeśli na stronie znajdują się inne wejścia, użytkownik może skupić się na jednym z nich, zanim dokument zostanie całkowicie załadowany. W takim przypadku bardzo uciążliwe staje się znalezienie przez użytkownika ostrości został przeniesiony spod nich, gdy zdarzenie load jest uruchamiane, więc należy użyć zdarzeń "focus, aby to śledzić.

<div contenteditable="true" id="editable"></div> 

<script type="text/javascript"> 
    window.onload = function() { 
     document.getElementById("editable").focus(); 
    }; 
</script> 
+2

Jeśli atrybut autofokusa HTML5 zaczyna obsługiwać elementy podlegające akceptacji, może to być lepsze rozwiązanie. Jednak obecnie działa tylko z elementami formularza: https://developer.mozilla.org/en-US/docs/Web/HTML/Forms_in_HTML#_autofocus_attribute – Loren

+0

Właściwie nie potrzebujesz 'onload' dla' focus'. – Qwertiy

1

Dla przyszłych widzów:

myślę, że może mam nieco bardziej eleganckie rozwiązanie.

$(window).on("load", function() { 
    $("[autofocus]").focus(); 
}); 

Po załadowaniu strony ... BAM jQuery skupia się na elemencie z atrybutem autofocus!

Można grać z selektorem, aby uzyskać dokładnie to, co chcesz.

Powiązane problemy