代码之家  ›  专栏  ›  技术社区  ›  tom

Refactor$(document).ready(),当前有2个实例

  •  3
  • tom  · 技术社区  · 14 年前

    FlashMessenger = {
        init: function() {
            setTimeout(function() {
                $(".flash").fadeOut("slow", function () {
                    $(".flash").remove();
                });
            }, 5000);
        }
    }
    
    SelectLanguage = {
        init: function() {
            $('#selectLanguageId').change(function() {
                $('#frmSelectLanguage').submit();
            });
        }
    }
    
    $(document).ready(FlashMessenger.init);
    $(document).ready(SelectLanguage.init);
    
    7 回复  |  直到 14 年前
        1
  •  3
  •   T.J. Crowder    14 年前

    首先,你没有理由 把它们结合起来。

    $(document).ready(function(jq){
        FlashMessenger.init(jq);
        SelectLanguage.init(jq);
    });
    

    分解:

    • 拿着吧 呼叫 其他init函数,传入jQuery传递给您的jQuery实例,以防它们使用它。

    您可以选择将每个 init try/catch 块,这样一个初始化中的错误不会阻止下一个初始化的发生,但这取决于您的需要。

        2
  •  8
  •   Ben Hodgson    13 年前

    $(FlashMessenger.init);
    $(SelectLanguage.init);
    

    如果你真的想让他们在一个电话里,试试这个:

    $(function() {
        FlashMessenger.init();
        SelectLanguage.init();
    });
    
        3
  •  3
  •   Daniel Vandersluis    14 年前

    $(document).ready(function()
    {
      FlashMessenger.init();
      SelectLanguage.init();
    });
    
        4
  •  3
  •   Stefanvds    14 年前
    $(document).ready(function() {
        FlashMessenger.init();
        SelectLanguage.init();
    });
    
        5
  •  1
  •   partoa    14 年前

    FlashMessenger = {
        init: function() {
            setTimeout(function() {
                $(".flash").fadeOut("slow", function () {
                    $(".flash").remove();
                });
            }, 5000);
        }
    }    
    SelectLanguage = {
        init: function() {
            $('#selectLanguageId').change(function() {
                $('#frmSelectLanguage').submit();
            });
        }
    }
    
    $(function(){
        FlashMessenger.init();
        SelectLanguage.init();
    });
    

    方案2

    FlashMessenger = {
        init: function() {
            setTimeout(function() {
                $(".flash").fadeOut("slow", function () {
                    $(".flash").remove();
                });
            }, 5000);
        }
    }
    
    SelectLanguage = {
        init: function() {
            $('#selectLanguageId').change(function() {
                $('#frmSelectLanguage').submit();
            });
        }
    }
    
    $(document).ready(function(){
        FlashMessenger.init();
        SelectLanguage.init();
    });
    

    方案3
    实际上,您不需要这两个对象,因为只有init方法可以使用,所以在我看来,这是最终的解决方案,除非您在其他地方使用这些对象。

    $(function(){
        $('#selectLanguageId').change(function() {
            $('#frmSelectLanguage').submit();
        });
        setTimeout(function() {
            $(".flash").fadeOut("slow", function () {
                    $(".flash").remove();
            });
        }, 5000);
    })
    

    this 原因。

        6
  •  0
  •   jrharshath    14 年前

    我想op的意思是,“如果将来我有第三个函数在 document.ready

    如果你不想要多个 $(document).ready() startupHooks 并将每个方法添加到其中:

    startupHooks[ startupHooks.length ] = myNewStartupHook;
    

    你的启动脚本看起来像

    $(document).ready(function() {
        for( var i=0; i<startupHooks.length; i++ ) {
            startupHooks[i]();
        }
    }
    

    我知道这不是很有用,但如果你喜欢,你可以这样做。

    就我个人而言,我会选择 电话。

        7
  •  0
  •   René    14 年前

    就我个人而言,我宁愿不使用文件准备就绪完全。 也许这不适用于0.01%的脚本,但它从来没有失败的工作,为我。

    你也可以在雅虎上看到。 http://developer.yahoo.com/performance/rules.html#js_bottom