2012-03-06 18 views
27

के बाद काम नहीं कर रहा है मेरे पास एक पृष्ठ है जिसमें एक अपडेट पैनल के भीतर उपयोगकर्ता नियंत्रण है। $(document).ready(function()) { कहा जाता है और पृष्ठ लोड होने बातें पहली बार लेकिन उपयोगकर्ता एक बटन पर क्लिक करता है, तो (उपयोगकर्ता नियंत्रण के अंदर), document.ready() बुलाया नहीं प्राप्त करता है कोड सही तरीके से कार्यान्वित किया जाता है (document.load, onload भी काम नहीं करते)दस्तावेज़। रीडी() पोस्टबैक

मेरे पास है नेट पर इसका शोध किया और इसी तरह की समस्याएं पाई लेकिन कुछ भी नहीं जो समझा सकता है कि यह क्यों काम नहीं कर रहा है। document.ready काम नहीं कर रहे अन्य कारण क्या हो सकते हैं?

+1

यह कई चीजें हो सकती है। साझा करने के लिए कोई कोड है? –

+0

जियान सही है, मैंने पाया कि एक अलग देव ने एक खंड जोड़ा था जिसने यूआरएल पथ की जांच की लेकिन यूआरएल पर आवरण को अनदेखा किया जा रहा था, मेरा कोड नहीं पहुंचा था। मैं यह सुनिश्चित करने के लिए अपने जेएस को अलर्ट जोड़ने की सलाह देता हूं कि इसे बुलाया नहीं जा रहा है और वहां से काम करता है। – Adam

उत्तर

41

यह partial postback के साथ एक समस्या होगी। डीओएम पुनः लोड नहीं किया गया है और इसलिए दस्तावेज़ तैयार फ़ंक्शन फिर से नहीं मारा जाएगा। तुम इतनी तरह जावास्क्रिप्ट में एक आंशिक पोस्टबैक हैंडलर आवंटित करने के लिए ...

function doSomething() { 
    //whatever you want to do on partial postback 
} 

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(doSomething); 

add_endRequest के लिए ऊपर कॉल जावास्क्रिप्ट जो निष्पादित किया जाता है जब पेज के पहली बार लोड में रखा जाना चाहिए की जरूरत है।

+2

जांचें यह 'Sys.WebForms.PageRequestManager.getInstance() होना चाहिए। Add_endRequest (doSomething);' – ShankarSangoli

+0

'Sys.WebForms.PageRequestManager' सी # या जावास्क्रिप्ट है? – Theomax

+1

यह जावास्क्रिप्ट है - यह माइक्रोसॉफ्ट अजाक्स जेएस पुस्तकालयों का एक दिनचर्या है जो –

8

Bestest रास्ता

<script type="text/javascript"> 

     function LoadScript() { 
      $(document).ready(function() { 

        //you code gose here 
            }); 
     } 
</script> 

या

UpdatePanel के तहत इसकी तुलना में आप ग्राहक स्क्रिप्ट रजिस्टर करने की आवश्यकता फिर से

ScriptManager.RegisterClientScript 

या उपयोग कर रहा है

<asp:UpdatePanel... 
<ContentTemplate 
    <script type="text/javascript"> 
        Sys.Application.add_load(LoadScript); 
    </script> 
you hemla code gose here 
</ContentTemplate> 
    </asp:UpdatePanel> 

जावास्क्रिप्ट समारोह

$(document).ready(function() { 
    // bind your jQuery events here initially 
}); 

var prm = Sys.WebForms.PageRequestManager.getInstance(); 

prm.add_endRequest(function() { 
    // re-bind your jQuery events here 
    loadscript(); 

}); 


$(document).ready(loadscript); 

function loadscript() 
{ 
    //yourcode 
} 
+0

क्या आपका मतलब जावास्क्रिप्ट को पंजीकृत करना है जिसे मैं फिर से हासिल करना चाहता हूं? – Theomax

+0

@aspdotnetuser - हां पसंद है या जैसा कि नीचे दिए गए उत्तर में सुझाव दिया गया है, आप इसे आसानी से कर सकते हैं –

+0

री-बाइंड द्वारा आपका क्या मतलब है? – Theomax

22

$(document).ready के बजाय आप function pageLoad(){} का उपयोग कर सकते हैं।

इसे स्वचालित रूप से ScriptManager द्वारा किसी पृष्ठ पर पोस्टबैक पर भी बुलाया जाता है।

+0

फ़ंक्शन पेज लोड() कुछ भी करने के लिए प्रतीत नहीं होता है। – Theomax

+0

और आपके पास पृष्ठ पर '' है? – tedski

+3

http://encosia.com/document-ready-and-pageload-are-not-the-same/ – tedski

14

मैंने कुछ समय पहले इसमें भाग लिया है, क्योंकि एल रोनाको ने कहा था, इसे डीओएम को फिर से लोड नहीं किया जाना है। हालांकि आप बस $(document).ready(function() {

को
Sys.Application.add_load(function() { 

यह हर पोस्टबैक पर चलने के लिए बाध्य करेगा बदल सकते हैं।

आप फ़ंक्शन पेज लोड() का भी उपयोग कर सकते हैं, लेकिन आपके पास केवल एक पृष्ठ लोड फ़ंक्शन हो सकता है, जबकि Sys.Aplication.add_load के साथ, आप जितनी चाहें उतने हैंडलर जोड़ सकते हैं।

+0

है जो काम नहीं करता है। – dcreight

+0

हाय ड्राइट, पृष्ठ में निम्न जोड़ें: ' : 'Sys.Application.add_load (function() { // हर पोस्टबैक पर करने के लिए यहाँ कोड डालने' फिर बाहरी फ़ाइल (file.js) में, निम्न कार्य करें }); ' 'फ़ंक्शन पेज लोड() {}' दृष्टिकोण का उपयोग करने में समस्या यह है कि आप इनमें से केवल एक पृष्ठ में ही हो सकते हैं, मेरे ऊपर अपना दृष्टिकोण बनाम आप जितना चाहें उतने add_load फ़ंक्शन जोड़ सकते हैं। यदि आपको अभी भी समस्या है तो कृपया त्रुटि या नमूना कोड भेजें। – pharophy

+0

मुझे यह काम मिल गया, लेकिन जवाब देने के लिए धन्यवाद :) – dcreight

-2

अधिकांश बार, यह अद्यतन पैनले के कारण हो रहा है। बस पोस्टबैक बटन पर ट्रिगर करें और यह इसे हल करेगा।

3

यह एक उदाहरण है कि अतीत में मेरे लिए काम किया है:

<script> 
function MyFunction(){ 
    $("#id").text("TESTING"); 
} 
//Calling MyFunction when document is ready (Page loaded first time) 
$(document).ready(MyFunction); 

//Calling MyFunction when the page is doing postback (asp.net) 
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(MyFunction); 
</script> 
0

मैं भी एक ही समस्या का सामना करना पड़ रहा था, लेकिन मैं jQuery $ (document) .ready ईवेंट हैंडलर काम करता है जब पृष्ठ लोड है, लेकिन बाद पाया एएसपी.Net AJAX UpdatePanel आंशिक पोस्टबैक इसे कॉल नहीं किया जाता है। तो Sys.Aplication.add_load (फ़ंक्शन() {}) का उपयोग करें; $ (दस्तावेज़) के बजाय .ready। यह मेरे लिए पूरी तरह से काम करता है :)

1

इस कोड के नीचे इस समस्या को हल करने के लिए अच्छा काम करता है। जैसा कि पहले पोस्ट किया गया लिंक में इंगित किया गया है (http://encosia.com/document-ready-and-pageload-are-not-the-same/), जब आपके पास अपडेटपैनल्स के साथ एएसपी.NET है तो आप फ़ंक्शन पेज लोड() का उपयोग करेंगे। जब आपके पास केवल एक पृष्ठ होता है और प्रत्येक पोस्टबैक में इसे पूरी तरह से पुनः लोड किया जाएगा, $ (दस्तावेज़) .ready() सही विकल्प है।

Pageload का उपयोग कर उदाहरण:

function pageLoad() { 

     $(".alteraSoVirgula").keyup(function() { 
      code here 
     }) 
    } 
+0

आपका उत्तर कुछ अन्य विचारों को स्पर्श करता है जो सबमिट किए गए अन्य उत्तरों (और स्वीकृत उत्तर) के रूप में हैं, लेकिन इसमें बहुत अधिक अतिरिक्त फ्लाफ शामिल है जो मूल रूप से इस कोड को लिखने के लिए विशिष्ट है। आपके उत्तर पर अधिक सकारात्मक प्रतिक्रिया प्राप्त करने के लिए मैं उन प्रश्नों को हटाने का सुझाव दूंगा जो पूछे जाने वाले प्रश्न के लिए विशिष्ट नहीं हैं और _Why_ आपके समाधान को हल करने के लिए एक स्पष्टीकरण जोड़ें। –

+0

क्या यह अभी अच्छा है? –

+0

हां, बहुत अच्छी नौकरी। –