2012-10-25 24 views
14

Ich möchte ein Eingabefeld dynamisch auf meiner Seite mit dem folgenden jQuery hinzuzufügen:jQuery dynamische Eingabefeld Fokus

var inputNode = "<input id='inputNode' class='tiContent' type='text' 
    placeholder='text input...'/>"; 
$("div").append(inputNode); 

und nach so tun, ich das Eingabefeld mit blinkenden Textcursor Fokus haben wollen, so Ich möchte es direkt nach der Erstellung eingeben.

Könnte mir bitte jemand sagen, wie kann ich das tun?

Ich habe versucht,

$(inputNode).focus()

Aufruf und haben auch

versucht

$(inputNode).trigger('click')

aber keiner von ihnen arbeitete. Ich kann in das Feld eingeben, nachdem ich darauf geklickt habe, aber wie gesagt, ich möchte ohne jede Interaktion sofort tippen.

Antwort

12

Wenn Sie versucht $(inputNode).focus(), jQuery wurde einfach ein neues getrennt Gebäude (aus dem DOM) <input> Element, das auf der einen anders war man angehängt hatte - obwohl diese getrennt ein :-)

fokussiert wurde Es gibt ein paar von Möglichkeiten, den Input zu fokussieren.

Wenn Sie HTML5 dann verwenden können, Hinzufügen des autofocus Attribut wird das Eingangs

var inputNode = '<input autofocus id="inputNode" class="tiContent" type="text" placeholder="text input..."/>'; 
$('div').append(inputNode); 

Oder mit jQuery konzentrieren, benötigen Sie bitte den <input>nach das Element finden erstellt wurde .focus() darauf zu nennen, wie die inputNode in Ihrem Code ist einfach eine Zeichenfolge und kein jQuery-Objekt.

var inputNode = '<input id="inputNode" class="tiContent" type="text" placeholder="text input..."/>'; 
$('div').append(inputNode); 
$('div input').focus(); // or $('#inputNode').focus(); 
+0

Vielen Dank! Dies ist der dritte richtige Weg, um es zu tun, Sie waren wirklich hilfreich, Sie alle! – Kumite

+1

Dieser funktioniert bei mir nicht, weil $ ('div input') .focus(); Wird ausgeführt, scheint das Element nicht zu existieren. –

+0

Autofokus funktioniert nur für die erste Textbox, und der Fokus funktioniert die ganze Zeit für mich. –

2

Sie können es in ein jQuery-Objekt konvertieren, bevor Sie es an dom anhängen, so dass Sie einen Verweis darauf haben. Dann rufen Sie einfach .focus auf das referenzierte Objekt.

var $inputNode = $("<input id='inputNode' class='tiContent' type='text' placeholder='text input...'/>"); 
$('body').append($inputNode);​​​ 
​$inputNode.focus();​ 

Hier ist ein fiddle.

+0

Dank hilft, jetzt weiß ich, wie ein HTML-Element in String zu jQuery-Objekt gegeben zu konvertieren. – Kumite

4

inputNode ist kein jQuery Element, es ist ein String ist.

Sie meinen wohl:

$('#inputNode').focus() 

im Gegensatz zu:

$(inputNode).focus() 

Der Browser wird nicht auf diese schimpfen, da Sie eine Variable mit diesem Namen haben

+0

Hallo zusammen! Vielen Dank, es funktioniert. Ich dachte, dass das Umgeben von $() es zu einem jQuery-Objekt umwandeln wird. (Ich bin ziemlich neu in diesem Zeug). danke nochmal! – Kumite

3
<input type="button" value="click me" id="btnCreateTxt" /> 
<div></div> 

$(document).ready(function() { 
    $('#btnCreateTxt').click(function() {   
     var inputNode = $("<input id='inputNode' class='tiContent' type='text' placeholder='text input...'/>"); 
     $("div").append(inputNode); 
     inputNode.focus();  
    }); 
}); 

funktioniert gut für mich: http://jsfiddle.net/GqFap/9/

4

Sie brauchen etwas wie folgt aus:

$('<input />').appendTo('div').get(0).focus(); 

Der Fokus ist ein Verfahren des DOM-Elements nicht das jQuery-Objekt daher die Notwendigkeit für einen Anruf zu ‚erhalten‘.

Sie mögen vielleicht auf die appendTo und get Methoden in dem jQuery docs

Hoffnung zu lesen, dieser

+0

Dieser arbeitete für mich aus der Box. Ich habe es so verwendet: '$ ('') .appendTo ('. Class'). Typeahead ([{...}]). Get (0) .focus();' – JoshP

+0

$ (html), anhängend es append(), dann Aufruf Fokus auf das Objekt ... funktioniert nicht. Das gleiche gilt nur für appendTo: hat funktioniert. Get schien nicht erforderlich zu sein, appendTo aufzurufen. – neminem

+0

Danke !! Diese Antwort hat für mich funktioniert –