Заставляя готовый блок jQuery запускать после всех остальных готовых блоков

Возможно ли, чтобы один готовый блок jQuery был выполнен после того, как все остальные сделали это.

У меня это на моей главной странице...

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

и это на одной из моих других страниц...

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

Проблема, которую я вижу, заключается в том, что первый блок выполняется перед вторым блоком, что вызывает проблему с ключом табуляции. Что происходит, так это то, что клавиатура фокусируется на адресной строке моего браузера, когда я нажимаю клавишу табуляции. Я немного изменил код, чтобы иметь это на моей главной странице...

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

и полностью уничтожить другой готовый блок. Выполнение этого делает ключ вкладки правильно, и установить фокус на моем textarea.

Я бы предпочел не иметь код страницы на моей главной странице.

Итак, есть ли способ сделать мой код для фокусного кода запущенным после wysiwyg-кода?

Ответы

Ответ 1

Это решение, с которым я пошел.

На моей главной странице у меня есть это...

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

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

и на моих подробных страницах у меня есть это...

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

Ответ 2

$(window).load() срабатывает функция после $(document).ready()

Ответ 3

Добавьте настраиваемое событие на главную страницу:

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

И привяжите его к другой странице:

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

Ссылки

Ответ 4

Как только вы только регистрируете только один document.ready() на главной странице, а затем разрешаете этому выполнять код на основе переменной? Это решение не так уж и изящно, но поиск синхронизации потоков JavaScript на самом деле ничего не изменил.

Вы можете изменить код на главной странице, чтобы:

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

И поместите этот script на свою страницу:

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