1

我的 ImageSlider 代码在 Chrome 中完美运行,但在 Mozilla 中它不起作用,如果我发出一些警报,那么它可能是因为有了警报它有时间在后台从 xml 加载值,如何延迟 init init () 函数。

HTML 代码::

$(document).ready(function () {
                getData();
                //alert('START');

            1});

JS代码::

  * DOMContentLoaded event handler -*/
var domReadyEvent =

{

    name: "domReadyEvent",

    /* Array of DOMContentLoaded event handlers.*/

    events: {},

    domReadyID: 1,

    bDone: false,

    DOMContentLoadedCustom: null,



    /* Function that adds DOMContentLoaded listeners to the array.*/

    add: function(handler)

    {

        /* Assign each event handler a unique ID. If the handler has an ID, it has already been added to the events object or been run.*/

        if (!handler.$$domReadyID)

        {

            handler.$$domReadyID = this.domReadyID++;



            /* If the DOMContentLoaded event has happened, run the function. */

            if(this.bDone)

            {

                handler();

            }



            /* store the event handler in the hash table */

            this.events[handler.$$domReadyID] = handler;

        }

    },



    remove: function(handler)

    {

        /* Delete the event handler from the hash table */

        if (handler.$$domReadyID)

        {

            delete this.events[handler.$$domReadyID];

        }

    },



    /* Function to process the DOMContentLoaded events array. */

    run: function()

    {

        /* quit if this function has already been called */

        if (this.bDone)

        {

            return;

        }



        /* Flag this function so we don't do the same thing twice */

        this.bDone = true;



        /* iterates through array of registered functions */

        for (var i in this.events)

        {

            this.events[i]();

        }

    },



    schedule: function()

    {

        /* Quit if the init function has already been called*/

        if (this.bDone)

        {

            return;

        }



        /* First, check for Safari or KHTML.*/

        if(/KHTML|WebKit/i.test(navigator.userAgent))

        {

            if(/loaded|complete/.test(document.readyState))

            {

                this.run();

            }

            else

            {

                /* Not ready yet, wait a little more.*/

                setTimeout(this.name + ".schedule()", 100);

            }

        }

        else if(document.getElementById("__ie_onload"))

        {

            /* Second, check for IE.*/

            return true;

        }



        /* Check for custom developer provided function.*/

        if(typeof this.DOMContentLoadedCustom === "function")

        {

            /* if DOM methods are supported, and the body element exists (using a double-check

            including document.body, for the benefit of older moz builds [eg ns7.1] in which

            getElementsByTagName('body')[0] is undefined, unless this script is in the body section) */

            if(typeof document.getElementsByTagName !== 'undefined' && (document.getElementsByTagName('body')[0] !== null || document.body !== null))

            {

                /* Call custom function. */

                if(this.DOMContentLoadedCustom())

                {

                    this.run();

                }

                else

                {

                    /* Not ready yet, wait a little more. */

                    setTimeout(this.name + ".schedule()", 250);

                }

            }

        }

        return true;

    },



    init: function()

    {

        /* If addEventListener supports the DOMContentLoaded event.*/

        if(document.addEventListener)

        {

            document.addEventListener("DOMContentLoaded", function() { domReadyEvent.run(); }, false);

        }



        /* Schedule to run the init function.*/

        setTimeout("domReadyEvent.schedule()", 100);



        function run()

        {

            domReadyEvent.run();

        }



        /* Just in case window.onload happens first, add it to onload using an available method.*/

        if(typeof addEvent !== "undefined")

        {

            addEvent(window, "load", run);

        }

        else if(document.addEventListener)

        {

            document.addEventListener("load", run, false);

        }

        else if(typeof window.onload === "function")

        {

            var oldonload = window.onload;

            window.onload = function()

            {

                domReadyEvent.run();

                oldonload();

            };

        }

        else

        {

            window.onload = run;

        }



        /* for Internet Explorer */

        /*@cc_on

            @if (@_win32 || @_win64)

            document.write("<script id=__ie_onload defer src=\"//:\"><\/script>");

            var script = document.getElementById("__ie_onload");

            script.onreadystatechange = function()

            {

                if (this.readyState == "complete")

                {

                    domReadyEvent.run(); // call the onload handler

                }

            };

            @end

        @*/

    }

};



var domReady = function(handler) { domReadyEvent.add(handler); };

domReadyEvent.init();





/* Create ImageFlow instances when the DOM structure has been loaded */

domReady(function()

{

    var instanceOne = new ImageFlow();

    instanceOne.init({ ImageFlowID:'myImageFlow' });

});
4

1 回答 1

0

我不理解您的代码,但可以告诉您添加延迟来解决此类问题是糟糕的编程实践。

而是找出导致这种行为的原因并尝试解决它。

您可以改用回调吗?

于 2013-07-03T08:37:28.600 回答