jquery
  • focus
  • jquery-click-event
  • input-field
  • 2012-10-25 16 views 14 likes 
    14

    Voglio aggiungere un campo di input in modo dinamico alla mia pagina utilizzando il seguente jQuery:jQuery campo di input dinamico attenzione

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

    e dopo averlo fatto, voglio che il campo di immissione di avere messa a fuoco con lampeggiante cursore di testo, in modo da Voglio inserirlo subito dopo la creazione.

    Qualcuno potrebbe dirmi come posso farlo?

    Ho provato a chiamare

    $(inputNode).focus()

    e hanno anche provato

    $(inputNode).trigger('click')

    ma nessuno di loro ha lavorato. Posso digitare nel campo dopo aver fatto clic su di esso, ma come ho detto, voglio digitare senza alcuna interazione immediatamente.

    risposta

    12

    Quando si è tentato $(inputNode).focus(), jQuery era semplicemente costruendo una nuova scollegato (dal DOM) <input> elemento che era diverso da quello che aveva aggiunto - anche se questo disconnesso è concentrata :-)

    Ci sono un paio di modi per focalizzare l'input.

    Se è possibile utilizzare HTML5 quindi aggiungendo l'attributo autofocus si concentrerà l'ingresso

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

    Oppure, utilizzando jQuery, è necessario trovare il <input>dopo l'elemento è stato creato per chiamare .focus() su di esso, come il inputNode nel tuo codice è semplicemente una stringa e non un oggetto jQuery.

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

    Mille grazie! Questo è il 3 ° modo corretto per farlo, sei stato davvero d'aiuto, tutti voi! – Kumite

    +1

    Questo non funziona per me perché quando $ ('div input'). Focus(); viene eseguito, l'elemento sembra non esistere. –

    +0

    L'autofocus funziona solo per la prima casella di testo e la messa a fuoco funziona sempre per me. –

    2

    È possibile convertirlo in un oggetto jQuery prima di aggiungerlo alla dom, in questo modo si ha un riferimento ad esso. Quindi chiama semplicemente .focus sull'oggetto di riferimento.

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

    Ecco uno fiddle.

    +0

    Grazie, ora so come convertire un elemento html data in stringa di oggetto jQuery. – Kumite

    4

    inputNode non è un elemento jQuery, è una stringa.

    Probabilmente significa:

    $('#inputNode').focus() 
    

    in contrapposizione a:

    $(inputNode).focus() 
    

    il browser non lamentarsi in questo dato che hai una variabile con quel nome

    +0

    Ciao! Mille grazie, funziona. Ho pensato che circondandolo con $() lo avrebbe lanciato su un oggetto jQuery. (Sono abbastanza nuovo per questa roba). grazie ancora! – 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();  
        }); 
    }); 
    

    funziona per me: http://jsfiddle.net/GqFap/9/

    4

    Hai bisogno di qualcosa di simile:

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

    Il metodo di messa a fuoco è un metodo dell'elemento DOM non l'oggetto jQuery qui la necessità di una chiamata per 'ottenere'.

    Come si potrebbe leggere su appendTo e get metodi docs jQuery

    Spero che questo aiuti

    +0

    Questo ha funzionato fuori dagli schemi per me. L'ho usato come tale: '$ ('') .appendTo ('. Class'). Typeahead ([{...}]). Get (0) .focus();' – JoshP

    +0

    $ (html), accodato usando append(), quindi chiamando focus sull'oggetto ... non funziona. La stessa cosa usando solo appendTo: ha funzionato. Get non sembra richiesto, basta chiamare appendTo. – neminem

    +0

    Grazie !! Questa risposta ha funzionato per me –

    Problemi correlati