setTimeout()似乎不适用于Firefox?

时间:2010-11-24 13:24:11

标签: javascript

我继承了一个网站!它被设计为在IE中工作,只有IE似乎......我现在被要求让网站在Firefox中运行。我已经修复了大部分的bug而没有任何问题,但这个让我感到难过。

setTimeout(fDelayedFunc,1000);

这行Javascript在IE中运行良好,但在Firefox中,函数fDelayedFunc永远不会触发。我已经删除了setTimeout和函数包装器,并尝试将代码作为main函数的一部分运行。这完全没有任何问题。

有很多代码涉及,但这里是主要但我遇到了麻烦。如果您想再看到代码,请告诉我。

            setTimeout(fDelayedFunc, 0);

            //Save the current text box value
            var vCurrentTBValue = vJQElement.val();

            function fDelayedFunc() {

                if (vJQElement.val() == vCurrentTBValue) {
                    alert("test");

                    //Get position list box should appear in
                    var vTop = vJQElement.position().top + 25;
                    var vLeft = vJQElement.position().left;

                    //Had to put a special case in for account due to the position co-ords being wrong. This is due to a css error
                    if (vHiddenFieldToWriteTo == "#ctl00_ContentPlaceHolder1_hfAccountCode") {
                        vTop = vJQElement.position().top + 58;
                        vLeft = vJQElement.position().left + 200;
                    }
                    else {
                        vTop = vJQElement.position().top + 25;
                        vLeft = vJQElement.position().left;
                    }


                    //Create div element
                    var vDivElement = $("<div id='divSearchBox' style='position:absolute; top:" + vTop + ";left:" + vLeft + "; z-index: 40000;'></div>");

                    //Create list box
                    var vListBox = $("<select id='lbResults' tabIndex='" + vJQElement.attr("tabIndex") + "' size='4' style='height:400px;'></select>");


                    //Bind a function to the list box which will select the item via either tab or enter
                    vListBox.bind("keydown", function() {
                        //Check if tab or enter has been pressed
                        if (event.keyCode == 9 || event.keyCode == 13) {
                            //Set hidden value to the selected items code
                            $(vHiddenFieldToWriteTo).val($(vListBox.find(":selected")).val());

                            //Create postback
                            $('#ctl00_ContentPlaceHolder1_wizNewConsignment_btnRefresh').click();
                        }
                        //Check if the up arrow has been pressed at the top of the listbox
                        else if (event.keyCode == 38 && $(vListBox.find(":selected")).val() == $(vListBox.find(":first")).val()) {
                            //Focus back on the search box
                            vElement.focus();
                        }
                    }).bind("dblclick", function() {
                        //Set hidden value to the selected items code
                        $(vHiddenFieldToWriteTo).val($(vListBox.find(":selected")).val());

                        //Create postback
                        $('#ctl00_ContentPlaceHolder1_wizNewConsignment_btnRefresh').click();
                    });

                    //Get search field
                    var vSearchText = vJQElement.val();

                    var vDepotID = $("#ctl00_ContentPlaceHolder1_wizNewConsignment_hfDepotID").val();
                    var vCustomerID = $("#ctl00_ContentPlaceHolder1_wizNewConsignment_hfCustomerID").val();
                    var vCountryID = $("#ctl00_ContentPlaceHolder1_wizNewConsignment_hfCountryID").val();
                    var vConsignee = vJQElement.attr("boolConsignee");

                    //Set a loading image in place until call completed
                    vJQElement.css("backgroundImage", "url(images/small-loader.gif)");
                    vJQElement.css("backgroundRepeat", "no-repeat");
                    vJQElement.css("backgroundPosition", "right");





                    //Make AJAX call
                    $.ajax({
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        url: "NewConsignment.asmx/fGetAddressesAndIDs",
                        data: "{'strSearchText' : '" + vSearchText + "', 'intDepotID' : '" + vDepotID + "', 'intCustomerID' : '" + vCustomerID + "', 'intCountryID' : '" + vCountryID + "', 'boolConsignee' : '" + vConsignee + "'}",
                        dataType: "json",
                        success: function fGetAddressesAndIDsResult(GetAddressesAndIDsResult) {
                            //Make sure there are results
                            if (GetAddressesAndIDsResult != null && GetAddressesAndIDsResult != "") {
                                var vNumberOfResults = 0;
                                var vNumberOfLearntAddresses = 0;
                                var vLearntAddressUniqueID = "";

                                //Try to get results (first call will work on Linux and catch will work on Windows)
                                try {
                                    //Check array exists (if this fails will go to catch)
                                    if (GetAddressesAndIDsResult.d.length > 0) {
                                        //Loop through the results
                                        $.each(GetAddressesAndIDsResult.d, function() {
                                            //Check for results
                                            if (this.length > 0) {
                                                //Evaluate JSON
                                                var vAddress = eval("(" + this + ")");

                                                //Create list item
                                                var vOption = $("<option class='AddressOption' value='" + vAddress.uniqueID + "'>" + vAddress.briefDescription + "</option>");

                                                //Find out number of learnt addresses
                                                if (vAddress.uniqueID.indexOf("ConLA") != -1) {
                                                    vNumberOfLearntAddresses++;
                                                    vLearntAddressUniqueID = vAddress.uniqueID;
                                                }

                                                //Add list item to list box
                                                vListBox.append(vOption);

                                                //Mark result added
                                                vNumberOfResults++;
                                            }
                                        });
                                    }
                                }
                                catch (err) {
                                    //Loop through the results
                                    $.each(GetAddressesAndIDsResult, function() {
                                        //Check for results
                                        if (this.length > 0) {
                                            //Evaluate JSON
                                            var vAddress = eval("(" + this + ")");

                                            //Create list item
                                            var vOption = $("<option class='AddressOption' value='" + vAddress.uniqueID + "'>" + vAddress.briefDescription + "</option>");

                                            //Find out number of learnt addresses
                                            if (vAddress.uniqueID.indexOf("ConLA") != -1) {
                                                vNumberOfLearntAddresses++;
                                                vLearntAddressUniqueID = vAddress.uniqueID;
                                            }

                                            //Add list item to list box
                                            vListBox.append(vOption);

                                            //Mark result added
                                            vNumberOfResults++;
                                        }
                                    });
                                }

                                //Check if only 1 learnt address was found
                                if (vNumberOfLearntAddresses == 1) {
                                    //Auto select this address
                                    //Set hidden value to the selected items code
                                    $(vHiddenFieldToWriteTo).val(vLearntAddressUniqueID);

                                    //Create postback
                                    $('#ctl00_ContentPlaceHolder1_wizNewConsignment_btnRefresh').click();
                                }

                                //Add list box to div
                                vDivElement.append(vListBox);

                                //Check if any results exist in div
                                if (vNumberOfResults != 0) {
                                    //Append div to page
                                    $("body").append(vDivElement);

                                    //Auto select first item
                                    vListBox.find(".AddressOption:first").attr("selected", "true");
                                }
                            }

                            //Hide loading image
                            vJQElement.css("backgroundImage", "none");
                        },
                        error: function(XMLHttpRequest, textStatus, errorThrown) {
                            //Inform user of error
                            alert("An error occured, please try again");

                            //Hide loading image
                            vJQElement.css("backgroundImage", "none");
                        }
                    });
                }

             }

3 个答案:

答案 0 :(得分:3)

试试这个:

setTimeout(function() { fDelayedFunc(); }, 0);

答案 1 :(得分:0)

我从setTimeout(function () {function1();}, 1500)中取出addEventListener("load", () => {code})

它在 Firefox 中对我有用

答案 2 :(得分:-4)

试试这个:setTimeout('fDelayedFunc()',0);