Domanda

Qual è il metodo corretto per impostare lo stato attivo su un campo specifico all'interno di un DIV caricato dinamicamente?

$("#display").load("?control=msgs"); // loads the HTML into the DIV
$('#display').fadeIn("fast"); // display it
$("tex#header").focus();          // ?? neither that
$("input#header").focus();        // ?? nor that
$('#display', '#header').focus()  // ?? nor that
$("#header").focus();             // ?? nor that works

Il seguente codice HTML viene recuperato nel display DIV:

<div id="display">
<form id="newHeaderForm" class="dataform" action="/" method="post">
    <input id="to" type="hidden" value="22" name="to"/>
    <dl>
        <dt>Header</dt>
        <dd>
            <input id="header" class="large" type="text" name="header" value="" maxlength="128"/>
        </dd>
 </form>
 </div>

Molte, molte grazie!

È stato utile?

Soluzione

La funzione load () è una funzione asincrona. È necessario impostare lo stato attivo al termine della chiamata load (), ovvero nella funzione di callback di load (), poiché altrimenti l'elemento a cui si fa riferimento da #header non esiste ancora. Ad esempio:

$("#display").load("?control=msgs", {}, function() { 
  $('#header').focus();
}); 

Ho avuto dei problemi anche con questa soluzione, quindi ho fatto un setTimeout nel callback e impostato il focus nel timeout per rendere / davvero / sicuro che l'elemento esista.

Altri suggerimenti

Hai provato semplicemente a selezionare per ID?

$("#header").focus();

Visto che gli ID dovrebbero essere unici, non è necessario disporre di un selettore più specifico.

Sì, questo accade quando si manipola un elemento che non esiste ancora (alcuni contributori qui hanno anche sottolineato l'ID univoco). Ho riscontrato un problema simile. Devo anche passare un argomento alla funzione manipolando presto l'elemento da rendere.

La soluzione selezionata qui non mi ha aiutato. Alla fine ne ho trovato uno che ha funzionato immediatamente. Ed è anche molto carino - chiusure.

Invece di:

$( '#header' ).focus();
or the tempting:
setTimeout( $( '#header' ).focus(), 500 );

Prova questo:

setTimeout( function() { $( '#header' ).focus() }, 500 );

Nel mio codice, testare passando l'argomento, questo non ha funzionato, il timeout è stato ignorato:

setTimeout( alert( 'Hello, '+name ), 1000 );

Funziona, il timeout scatta:

setTimeout( function() { alert( 'Hello, '+name ) }, 1000 );

Fa schifo che w3schools non ne parli.

I crediti vanno a: makemineatriple. it .

Speriamo che questo aiuti qualcuno che viene qui.

Martas

$("#display").load("?control=msgs", {}, function() { 
  $('#header').focus();
});

L'ho provato ma non funziona, per favore dammi maggiori consigli per risolvere questo problema. grazie per il tuo aiuto

Se

$("#header").focus();

non funziona, quindi c'è un altro elemento nella tua pagina con l'id dell'intestazione?

Usa firebug per eseguire $ (" # header ") e vedi cosa restituisce.

Come ha sottolineato Omu, è necessario impostare lo stato attivo in una funzione di pronto documento. jQuery lo fornisce per te. E seleziona un ID. Ad esempio, se si dispone di una pagina di accesso:

$(function() { $("#login-user-name").focus(); }); // jQuery rocks!

Funziona al caricamento della pagina.

<script type="text/javascript">
    $(function () {
        $("#header").focus();
    });
</script>

Gli elementi aggiunti dinamicamente devono essere aggiunti al DOM ... clone (). append () lo aggiunge al DOM ... che consente di selezionarlo tramite jquery.

$("#header").attr('tabindex', -1).focus();
$(function (){
    $('body').on('keypress','.sobitie_snses input',function(e){
        if(e.keyCode==13){
            $(this).blur();
            var new_fild =  $(this).clone().val('');
            $(this).parent().append(new_fild);
            $(new_fild).focus();
        }
    });
});

la maggior parte dell'errore è dovuta al fatto che U usa un oggetto sbagliato per impostare la prorepty o la funzione. Usa console.log (new_fild); per vedere a quale oggetto U provare a impostare la prorepty o la funzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top