强制jQuery ready块在所有其他就绪块之后运行

时间:2009-10-10 22:04:42

标签: jquery

是否有可能在所有其他人完成后执行一个jQuery ready块。

我在母版页中有这个...

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

我看到的问题是第一个块在第二个块之前执行,这导致tab键出现问题。发生的事情是,当我按Tab键时,键盘焦点会转到浏览器中的地址栏。我已稍微更改了代码,以便在我的母版页中显示...

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

完全取消另一个就绪块。这样做可以使Tab键正常工作,并将焦点设置到我的textarea上。

我宁愿在母版页中没有特定于页面的代码。

那么,有没有办法让我的文本框聚焦代码在wysiwyg代码之后运行?

4 个答案:

答案 0 :(得分:9)

$(window).load()函数在$(document).ready()

之后触发

答案 1 :(得分:8)

在您的母版页中添加custom event触发器:

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

<强>参考

答案 2 :(得分:2)

这是我采用的解决方案。

在我的母版页中,我有这个......

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

答案 3 :(得分:1)

只有你只在主页上注册一个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 type="text/javascript">
    runWysiwyg = true;
</script>