2010-11-30 15 views
6

Dies ist nur das seltsamste Ding. Ich habe eine Sammy.js App, und ich möchte den Fokus auf ein Textfeld direkt nach dem Laden von HTML setzen. Ich habe diese hier Coffee bekam:Kann Fokus() nicht auf ein Textfeld setzen

this.partial('templates/my-template.jqt').then -> 
    i = $('#item') 
    debugger 
    i.focus() 

Während ich im Debugger bin, rechts auf dieser Linie kann ich überprüfen „i“ und sehen, dass es ein JQuery-Objekt ist. Ich kann sogar i.val ("HI THERE!") Aufrufen und sehe mein Textfeld aktualisieren. Aber, i.focus() aufzurufen, tut absolut nichts. Gibt es ein Sicherheitsmerkmal, das mir fehlt, das Sie nicht auf ein Textelement konzentrieren kann, das dynamisch geladen wurde?

+0

CoffeeScript ftw – drozzy

+0

Btw, woher weißt du, was du tun kannst ".then" auf der partiellen? Ich kann für mein Leben nicht herausfinden, was die "partielle" Methode von Sammy.js api docs zurückgibt. Wie findest du das Zeug heraus? – drozzy

Antwort

0

Wenn Sie sicher sind, dass Sie $('#item') Objekt erhalten. Sie können einige Dinge ausprobieren.

Stellen Sie sicher, dass Sie nur ein Eingabefeld mit <input type="text" id="item" /> haben. Die ID sollte nicht wiederholt werden.

Als nächstes versuchen Sie es nicht $('#item').focus().

Danke. mit Grüßen,

Wasim

2

JQuery im Fokus() konzentriert sich nicht auf ein Element, bindet es einen Event-Handler zu konzentrieren. http://api.jquery.com/focus/

Versuchen Sie stattdessen i.get() .focus().

+0

Eigentlich, wenn ich $ ('input [type = text]') .focus(), es funktioniert in Chrome, aber nicht iOS. Hier ist die eigentliche Datei: https://github.com/pkulak/mealfire_mobile/blob/master/coffeescripts/add_extra.coffee –

+2

Wenn ich 'i.get() .focus()' in Chrome versuche, bekomme ich "Uncaught TypeError: Objekt [Objekt HTMLInputElement] hat keine Methode 'Fokus' ". – LarsH

+2

Auch re: "JQuery Fokus() konzentriert sich nicht auf ein Element, es bindet einen Ereignishandler zu konzentrieren": Ohne Argumente bindet es keinen Ereignishandler; es löst einen aus. – LarsH

1

Machen Sie es wie folgt aus:

i.trigger 'focus' 
4

Versuchen:

setTimeout(function() { $('#item').focus() }, 1); 

Es ist ziemlich weit verbreitetes Problem. Aus irgendeinem Grund funktioniert die Verzögerung des Fokus für 1ms.

+0

Was? Das. Teufel. +1000 Internets – glyph

Verwandte Themen