Заставляя готовый блок 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>