2010-06-09 7 views
51

मैं एक first.js फ़ाइल है कि इस तरह कुछ है पृष्ठ index.php में शामिल है:

<?php function slidders($config, $addon) 
{ 
    $return = ' 
    <script type="text/javascript"> 
     $(function() { 
      $("#slider_'.$addon['p_cod'].'").slider({ 
      min: '.$config['min'].', 
      max: '.$config['max'].', 
      step: '.$config['step'].', 
      slide: function(event, ui) { 
       $("#cod_'.$addon['p_cod'].'").val(ui.value); 
       $(".cod_'.$addon['p_cod'].'").html(ui.value+"'[email protected]$unit.'"); 
      }, 
      change: function(event, ui) { 
       $("#cod_'.$addon['p_cod'].'").change(); 
      } 
     }); 
      $("#cod_'.$addon['p_cod'].'").val($("#slider_'.$addon['p_cod'].'").slider("value")); 
      $(".cod_'.$addon['p_cod'].'").html($("#slider_'.$addon['p_cod'].'").slider("value")+"'[email protected]$unit.'"); 
    }); 
    </script>'; 
    return $return; 
} ?> 

: index.php में

$(function(){ 

    $("#my_slider").slider("value", 10); 

}); 

और उनमें मैं कुछ dynamicly बनाई slidders है समस्या यह है, क्योंकि मेरे index.php स्लाइडर को मेरे पहले.जेएस के बाद तुरंत चालू किया जा रहा है, मैं वहां कोई मान सेट नहीं कर सकता, क्या कोई भी घटना है जैसे "सभी $ (दस्तावेज़) .ready() चलाया गया है" जिसका उपयोग मैं कर सकता हूं index.php में बनाए गए स्लाइडर में हेरफेर करने के लिए first.js में?

+1

मुझे आपका कोड समझ में नहीं आ रहा है। आप क्या खत्म करने की कोशिश कर रहे हैं? यह वैसे भी दुर्घटनाग्रस्त हो जाएगा क्योंकि आप लाइन ब्रेक से बच नहीं रहे हैं। – user113716

+0

क्षमा करें अगर मैं स्पष्ट नहीं था, दूसरा कोड PHP है। इसे और अधिक स्पष्ट करने के लिए संपादित करने जा रहे हैं। – mjsilva

+0

23384 विचार ... वाह: डी –

उत्तर

71

न पता है जब पिछले $(document).ready() समारोह निकाल दिया बताने के लिए है, लेकिन $(window).load() समारोह आग $(document).ready()

+0

धन्यवाद जॉन जो समाधान था मैंने अभी अपना $ (फ़ंक्शन() {("# my_slider") बदल दिया। स्लाइडर ("मान", 10);}); $ (विंडो) .load (फ़ंक्शन() {("# my_slider") के लिए। स्लाइडर ("मान", 10);}); और यह काम किया। चीयर्स भाई! – mjsilva

+0

@mjsilva ... खुशी है कि मैं –

+4

इस उत्तर पर ट्विस्ट की मदद कर सकता हूं: कभी-कभी window.load के बाद दस्तावेज़ तैयार आग लगती है। http://stackoverflow.com/questions/20133159/the-window-load-event-fires-before-that-document-ready-event-with-cache – Toby

3

jQuery के $ (दस्तावेज़) .ready() फ़ंक्शन का लक्ष्य यह है कि मानक जावास्क्रिप्ट विंडो.ऑलोड लोड तब तक नहीं चलेगा जब तक पृष्ठ पर सब कुछ लोड नहीं होता है (छवियों सहित, आदि), भले ही कार्य उपयोगी रूप से इससे पहले अच्छी तरह से चलना शुरू कर सकते हैं। तो $ (दस्तावेज़) .ready() जैसे ही डोम पदानुक्रम का निर्माण होता है।

यह देखते हुए, एक विकल्प पृष्ठ लोड पर "बाकी सब कुछ के बाद" स्क्रिप्ट चलाने के लिए होगा। यह गारंटी नहीं देगा कि सभी $ (दस्तावेज़) .ready() स्क्रिप्ट पूरी हो चुकी हैं, हालांकि।

एक बेहतर लेकिन अधिक जटिल विकल्प स्लाइडर के अस्तित्व की जांच करने वाला एक फ़ंक्शन बनाना है, और यदि वे मौजूद नहीं हैं, तो "setTimeout" स्वयं पर कॉल करें, इसलिए यह कुछ मिलीसेकंड का इंतजार कर सकता है और पुनः प्रयास कर सकता है।

(अपने विशिष्ट सवाल का जवाब करने के लिए, कोई है, वहाँ कोई "सब के बाद $ (document) .ready() समाप्त हो गया है" कॉलबैक है।)

0

करने के बाद आपको बेहतर होगा कि केवल आईडी = my_slider साथ तत्व के लिए आग जाएगा के बाद से करने के बजाय अपने स्लाइडर्स #my_slider के लिए एक अनूठा वर्ग को जोड़ने के लिए।

यदि आप एक ही कार्यक्षमता चाहते हैं तो आपको जांच करनी चाहिए। Jquery से लाइव यह बाध्यकारी के बाद जोड़े गए तत्वों पर समान कार्यक्षमता रखेगा।

यदि यह आपके लिए काम नहीं करेगा तो जब आप नए स्लाइडर्स जोड़ते हैं तो आपको उन्हें डीओएम में जाना होगा और आवश्यक फ़ंक्शन को कॉल करना होगा।

+0

हाय डार्रेन 102, मेरे स्लाइडर्स में अद्वितीय आईडी हैं, जो मैंने पोस्ट किया है, वह मेरे चलने वाले कोड को दोबारा नहीं बदलता है, मैं बस इसे पोस्ट करता हूं, यह एक उदाहरण के रूप में है जो मैं पूरा करने की कोशिश कर रहा था। क्षमा करें अगर यह किसी भ्रम का कारण बनता है, तो मैं अभी भी प्रश्न पूछने में एक नया हूं @ stackoverflow: पी – mjsilva

56

सबसे सुरक्षित बात यह है कि $(window).load()$(document).ready() के अंदर आना है। यह सभी मामलों में निष्पादन आदेश को सुरक्षित रखेगा ताकि यह सुनिश्चित किया जा सके कि आपका रन-अंतिम कोड $(window).load() तक नहीं भेजा गया है जब तक कि सभी $(document).ready() स्क्रिप्ट पूरी नहीं हो जातीं। इसके बिना कुछ ब्राउज़रों में संभावित दौड़ की स्थिति होती है जहां $(window).load() सभी $(document).ready() स्क्रिप्ट के बाद शुरू होने के बाद लागू किया जा सकता है लेकिन सभी $(document).ready() स्क्रिप्ट्स से पहले समाप्त हो गया है।

$(function(){ 
    $(function(){ 

     $("#my_slider").slider("value", 10); 

    }); 
}); 

बेवकूफ सही लग रहा है:

$(document).ready(function() { 
    $(window).load(function() { 
     // this code will run after all other $(document).ready() scripts 
     // have completely finished, AND all page elements are fully loaded. 
    }); 
}); 
+1

-1 मेरा अपमानजनक नहीं है, लेकिन यह सच नहीं है। क्या आप आगे समझा सकते हैं या संदर्भ छोड़ सकते हैं? यह कौन सा ब्राउज़र हो सकता है और वे अलग-अलग क्या करते हैं? मैं केवल यह सच देख सकता हूं अगर जेएस घटनाओं को बहुप्रचारित किया गया था (या jQuery में DOMDocumentReady हैंडलर उत्पन्न हुआ), और फिर भी, मुझे नहीं लगता कि आपका फिक्स इस मुद्दे को संबोधित करेगा। – Toby

+2

इस SO प्रश्न पर अधिक जानकारी: [एक दस्तावेज़ तैयार अंदर विंडो लोड] [http://stackoverflow.com/questions/5006922/window-load-inside-a-document-ready) निश्चित रूप से IE8 में होता है। यह एक बेल्ट-एंड-निलंबन दृष्टिकोण है; यह हानिकारक है और कुछ किनारे के मामलों से बचाता है। – Ian

+0

इस सुझाव के लिए धन्यवाद! – Didier68

9

इस स्वच्छ चाल/सकल हैक का प्रयास करें? यह काम करता है क्योंकि jQuery ने जोड़े गए ऑर्डर में इवेंट हैंडलर निष्पादित किए हैं। अपने इवेंट हैंडलर में इवेंट हैंडलर जोड़ना जितना देर हो सके उतना देर हो सकता है (बस सुनिश्चित करें कि आप इसे किसी भी स्लाइडर्स पर गलती से नहीं कर रहे हैं; यह करना बहुत आसान है)।

अवधारणा का सबूत। http://jsfiddle.net/9HhnX/

12

इयान के जवाब के आधार पर मैं इस पता लगा (परीक्षण किया - काम कर रहे):

jQuery(document).ready(function() { 
    jQuery(document).ready(function() { 
     /* CODE HERE IS EXECUTED AS THE LAST .ready-CALLBACK */ 
    }); 
}); 
बेशक

इस वजह से तैयार कॉलबैक आदेश उन्हें सौंपा जहां लागू कर रहे हैं। फिलहाल, जब आपका बाहरी तैयार कॉलबैक लागू किया जाता है, तो अन्य सभी स्क्रिप्ट में पहले से ही उनके तैयार कॉलबैक होना चाहिए। तो अपने तैयार कॉलबैक (आंतरिक एक) को असाइन करना अब आपके आखिरी होने का कारण बन जाएगा।

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