2009-10-10 16 views
13

Czy można wykonać jeden gotowy blok jQuery po wykonaniu wszystkich innych zadań?wymuszenie uruchomienia bloku gotowego jQuery po wszystkich pozostałych gotowych blokach.

mam to na mojej stronie głównej ...

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

i to w jednym z moich innych stron ...

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

Problem widzę jest, że pierwszy blok jest wykonywane przed drugim blokiem, co powoduje problem z klawiszem tabulatora. Co się dzieje, to że fokus na klawiaturze przechodzi do paska adresu w przeglądarce po naciśnięciu klawisza tabulatora. Zmieniłem kod nieco, aby mieć to na mojej stronie wzorcowej ...

<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> 

i całkowicie usunąć drugi gotowy blok. Sprawia to, że klawisz tabulacji działa poprawnie i ustawia fokus na moim obszarze tekstowym.

Wolałbym nie mieć określonego kodu strony na mojej stronie wzorcowej.

Czy istnieje sposób, aby mój kod ogniskowania w polu tekstowym był uruchamiany po kodzie WYSIWIG?

Odpowiedz

2

To rozwiązanie pojechałem z.

W mojej stronie wzorcowej mam to ...

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

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

iw moich stronach szczegółowo mam to ...

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

Co tylko rejestrujesz tylko jeden document.ready() na stronie wzorcowej, a następnie pozwalasz wykonać kod na podstawie zmiennej? To rozwiązanie nie jest tak eleganckie, ale wyszukiwanie synchronizacji wątków JavaScript nie zmieniło niczego.

Można zmienić kod na stronie wzorcowej do:

<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> 

i umieścić ten skrypt w was strony:

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

Dzięki, ja jakby dostał to samo rozwiązanie. Poszedłem do funkcji OnLoad() na mojej stronie, z tym w master ... $ (document) .ready (function() { if (typeof (OnLoad)! = "undefined") { OnLoad(); } $ ("input [type = 'text']: enabled: first", document.forms [0]). focus() .select(); }); –

+0

Szukałem więcej ogólnego rozwiązania problemu synchronizacji i okazało się, że JavaScript nie jest wielowątkowy: http://stackoverflow.com/questions/39879/why-doesnt-javascript-support-multithreading –

+1

Nie zobaczysz cokolwiek na temat "synchronizacji wątków JavaScript", ponieważ silniki JS w przeglądarce są wszystkie wątkowane. –

9

$(window).load() funkcyjne pożary po $(document).ready()

+2

Pożary _long_ po faktycznie $ '(document) .ready() '. – skalee

+1

Zrobiłem to doskonale dla mnie, dzięki i +1. – Renan

8

Dodaj custom event spust do strony głównej:

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

I powiązać go z drugiej strony:

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

Referencje

+0

Ten na pierwszy rzut oka może wyglądać przerażająco, ale w rzeczywistości jest całkiem prosty i zwykle jest o wiele lepszy niż słuchanie zdarzenia "obciążenia". Proszę przeczytać [zdarzenia/gotowe z dokumentacji JQuery] (http://docs.jquery.com/Events/ready), jeśli nie wiesz kiedy "ładowanie" jest uruchamiane i jak długo musisz na to czekać. – skalee

Powiązane problemy