2009-10-10 8 views
13

E 'possibile avere un blocco jQuery ready eseguito dopo che tutti gli altri lo hanno fatto.forzare un blocco jQuery ready da eseguire dopo tutti gli altri blocchi pronti

ho questo nella mia pagina master ...

<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     $("input[type='text']:enabled:first", document.forms[0]).focus().select(); 
    }); 
</script> 

e questo in una delle mie altre pagine ...

<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     $('textarea.message-body').wysiwyg(); 
    }); 
</script> 

Il problema che sto vedendo è che il primo blocco è eseguito prima del secondo blocco, che causa un problema con il tasto tab. Quello che sta succedendo è che l'attenzione della tastiera si sposta sulla barra degli indirizzi nel mio browser quando premo il tasto Tab. Ho modificato leggermente il codice per avere questo nella mia pagina principale ...

<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     var bodies = $('textarea.message-body'); 
     if (bodies.length > 0) 
     { 
      bodies.wysiwyg(); 
     } 

     $("input[type='text']:enabled:first", document.forms[0]).focus().select(); 
    }); 
</script> 

e eliminare completamente l'altro blocco pronto. In questo modo il tasto Tab funziona correttamente e imposta lo stato attivo sulla mia textarea.

Preferisco non avere codice specifico per la pagina nella mia pagina principale.

Quindi, c'è un modo per far funzionare il mio codice di messa a fuoco del textbox dopo il codice wysiwyg?

risposta

2

Questa è la soluzione sono andato con.

Nella mia pagina master ho questo ...

<script type="text/javascript"> 
<!-- 
    $(document).ready(function() 
    { 
     if (typeof (OnLoad) != "undefined") 
     { 
      OnLoad(); 
     } 

     $("input[type='text']:enabled:first", document.forms[0]).focus().select(); 
    }); 
//--> 
</script> 

e nelle mie pagine di dettaglio che ho questo ...

<script type="text/javascript"> 
<!-- 
    function OnLoad() 
    { 
     $('textarea.message-body').wysiwyg(); 
    } 
//--> 
</script> 
1

Che ne dici di registrare solo un documento solo.() Nella pagina principale e quindi lasciare che esegua il codice in base a una variabile? Questa soluzione non è così elegante, ma una ricerca per la sincronizzazione dei thread JavaScript non ha realmente disattivato nulla.

è possibile modificare il codice nella pagina master per:

<script type="text/javascript"> 
    var runWysiwyg = false; 
    $(document).ready(function() 
    { 
     if (runWysiwyg) { 
      $('textarea.message-body').wysiwyg(); 
     } 
     $("input[type='text']:enabled:first", document.forms[0]).focus().select(); 
    }); 
</script> 

e mettere questo script in voi pagina:

<script type="text/javascript"> 
    runWysiwyg = true; 
</script> 
+1

Grazie, mi piacerebbe una sorta di ottenuto la stessa soluzione. Sono andato per avere una funzione OnLoad() nella mia pagina, con questo nel master ...

+0

Ho cercato un po 'di più per una soluzione generale sul problema di sincronizzazione e ho scoperto che JavaScript non è multithread: http://stackoverflow.com/questions/39879/why-doesnt-javascript-support-multithreading –

+1

Non vedrai qualsiasi cosa su "Sincronizzazione thread JavaScript" perché i motori JS nel browser sono tutti a thread singolo. –

9

$(window).load() incendi funzione dopo il $(document).ready()

+2

Fires _long_ dopo $ '(document) .ready()', in realtà. – skalee

+1

Ho svolto il lavoro perfettamente per me, grazie e +1. – Renan

8

Aggiungi un trigger custom event alla tua pagina master:

<script type="text/javascript"> 
$(document).ready(function() 
{ 
    $('textarea.message-body').wysiwyg(); 
    $(document).trigger('tb'); 
}); 
</script> 

e associarlo alla altra pagina:

<script type="text/javascript"> 
$(document).bind('tb', function(){ 
    $("input[type='text']:enabled:first", document.forms[0]).focus().select();   
}); 
</script> 

Riferimenti

+0

Questo potrebbe sembrare spaventoso a prima vista, ma in realtà è piuttosto semplice e di solito molto meglio di ascoltare l'evento "load". Si prega di leggere [eventi/pronti da documenti JQuery] (http://docs.jquery.com/Events/ready) se non si sa quando viene attivato il "caricamento" e per quanto tempo è necessario attendere. – skalee

Problemi correlati