2010-11-24 18 views
5

मुझे एक वेबसाइट विरासत में मिली है! जिसे आईई में काम करने के लिए डिज़ाइन किया गया था और केवल आईई ऐसा लगता है .. अब मुझे साइट फ़ायरफ़ॉक्स में चलाने के लिए कहा गया है। मैंने बिना किसी समस्या के अधिकांश बग तय कर दिए हैं लेकिन यह मुझे स्टंप कर चुका है।setTimeout() फ़ायरफ़ॉक्स में काम नहीं कर रहा प्रतीत होता है?

सेटटाइमआउट (fDelayedFunc, 1000);

जावास्क्रिप्ट की यह पंक्ति, आईई में ठीक काम करती है लेकिन फ़ायरफ़ॉक्स में फ़ंक्शन fDelayedFunc कभी नहीं आग लगती है। मैंने setTimeout और फ़ंक्शन रैपर को हटा दिया है और मुख्य फ़ंक्शन के हिस्से के रूप में कोड चलाने का प्रयास किया है। यह बिना किसी समस्या के काम करता है।

कोड में बहुत सारे शामिल हैं लेकिन यहां मुख्य है लेकिन मुझे परेशानी हो रही है। यदि आप कोड के और अधिक देखना चाहते हैं तो कृपया मुझे बताएं।

  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"); 
         } 
        }); 
       } 

      } 
+2

क्या आपने फ़ंक्शन में 'console.log()' कॉल डाली है? आप कैसे जानते हैं * यह काम नहीं करता है? मैं आपको आश्वासन देता हूं कि 'सेटटाइमआउट)' निश्चित रूप से फ़ायरफ़ॉक्स में काम करता है! – Pointy

+1

इसके अलावा, सुनिश्चित करें कि आपने आगे जाने से पहले फ़ायरबग इंस्टॉल किया है। – Pointy

+1

क्या आप सुनिश्चित हैं कि पहली शर्त ('vJQElement.val() == vCurrentTBValue') समय-समय पर कार्यरत होने पर मिलती है? –

उत्तर

3

इस प्रयास करें:

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

वास्तव में यह आवश्यक नहीं है। – xj9

+1

यह वास्तव में मेरे लिए काम नहीं किया क्यों नहीं! लेकिन ऐसा लगता है कि समस्या हल हो गई है! सहायता के लिए धन्यवाद! – flyersun

+3

कृपया समझाएं। – Chris

-4

कोशिश यह: setTimeout ('fDelayedFunc()', 0);

+3

नहीं, यह वास्तव में कोई फर्क नहीं पड़ता है, साथ ही यह चीजों को करने का उचित तरीका नहीं है। पहला तर्क एक फ़ंक्शन संदर्भ होना चाहिए, क्योंकि यह वास्तव में कोड में है। – Pointy

+2

'setTimeout' और' setInterval' 'पर पैरामीटर के रूप में तारों का उपयोग न करें; [synal()] (https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Functions/eval#Don%27t_use_eval!) का उपयोग करने के समान कारणों से इस वाक्यविन्यास का उपयोग करने की अनुशंसा नहीं की जाती है। –

+0

'eval' बुरा है। – xj9

संबंधित मुद्दे