2012-01-25 19 views
17

पृष्ठ लोड होने के बाद मैं एक जावास्क्रिप्ट फ़ंक्शन निष्पादित करना चाहता हूं। फिलहाल मेरे पास कमांड बटन है और सब कुछ ठीक काम करता है। हालांकि यदि उपयोगकर्ता बटन को हिट नहीं करना चाहता तो यह अधिक आरामदायक होगा।पेज लोड के बाद जावास्क्रिप्ट को निष्पादित कैसे करें?

मैंने f: event की कोशिश की है, लेकिन मेरे पास श्रोता नहीं है, मेरे पास केवल जावास्क्रिप्ट फ़ंक्शन है। इसके अलावा बॉडी ऑनलोड मेरे लिए काम नहीं करता क्योंकि मैं केवल उच्च स्तरीय घटकों का उपयोग करता हूं।

<script> 
    jQuery(document).ready(function() { 
     PathFinder.findAndGo(); 
    }); 
</script> 

अपडेट::

यह हो गया है के रूप में इस

<f:view xmlns="http://www.w3.org/1999/xhtml" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:p="http://primefaces.org/ui" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:pm="http://primefaces.org/mobile" contentType="text/html"> 

<ui:composition template="/resources/master.xhtml"> 

    <ui:define name="content"> 


     <pm:content> 

      <h:inputHidden id="address" value="#{pathFinderBean.address}" /> 

      <div id="map" style="width: 100%; height: 285px;"></div> 

      <p:commandButton type="button" value="Route" onclick="PathFinder.findAndGo()"/> 

      <div id="route"></div> 

     </pm:content> 
    </ui:define> 

</ui:composition> 

JavaScript फ़ंक्शन PathFinder.findAndGo मेरी master.xhtml

+0

आप बल्कि ऑनलोड के बजाय तैयार पर यह करने के लिए चाहते हो जाएगा ? –

+0

यदि आपकी स्क्रिप्ट शीर्ष पर है और बटन पृष्ठ में है, तो तत्व हमेशा प्रकट होने से पहले लोड हो जाएगा। हालांकि, यदि स्क्रिप्ट को पृष्ठ में कुछ तत्वों की आवश्यकता होती है और उपयोगकर्ता लोड होने से पहले बटन पर क्लिक कर सकते हैं, तो आप उपलब्ध होने तक बटन को अक्षम कर सकते हैं (या कुछ अन्य कार्रवाई करें)। – RobG

+0

ऑटोमून सत्य के साथ रिमोट कॉमांड का उपयोग करें। – meyquel

उत्तर

23

उपयोग JQuery में परिभाषित किया गया है <ui:define name="content"> के भीतर।

+0

इसके साथ क्या गलत है? डाउनवोट क्यों? 'ऑनलोड' ईवेंट को संभालने के एकमात्र उद्देश्य के लिए –

+2

jQuery एक अच्छा विचार नहीं है। – bennedich

+2

यह इस मामले में अच्छा है क्योंकि वह प्राइमफेस का उपयोग कर रहा है जिसे jQuery की आवश्यकता है और लोड करता है। –

4
window.onload = function() { 
    // code to execute here 
} 
+0

मेरे लिए काम नहीं करता है। मैंने इसे स्क्रिप्ट टैग में रखा और इसे पक्ष में अलग-अलग स्थानों पर रखा लेकिन कुछ भी नहीं हुआ। – steffan

3

primefaces मैं सफलतापूर्वक निम्न का उपयोग करने में कामयाब हो लिए:

  1. मैं <head> में लोड किया कार्यों मैं ऑनलोड जरूरत युक्त जे एस फ़ाइल का उपयोग करके:

    < h:outputScript library="javascript" name="nameOfMyFile.js" target="head"> 
    
  2. मैंने "nameOfMyFile.js" से आवश्यक जेएस फ़ंक्शंस को चलाने के लिए निम्न का उपयोग किया है:

    < h:body onload="nameOfMyFunction()" > 
    
  3. कृपया ध्यान दें कि मेरी js फ़ाइल भी तल पर निम्न आदेश का समावेश है:

    $(document).ready(nameOfMyFunction()); 
    

3'rd बिंदु समारोह onReady चलाने के लिए है। यह देखने के लिए एक प्रयोग था कि क्या मैं अनुसूची कार्यक्रमों में एचटीएमएल जोड़ सकता हूं ... क्योंकि पारित तारों को पार्स किया गया है और एचटीएमएल टैग बच निकले हैं। मुझे अभी तक यह पता लगाना है कि मुझे onReady और onLoad दोनों की आवश्यकता क्यों है .... लेकिन फिलहाल यह मेरे लिए काम करने का एकमात्र तरीका है। अगर मुझे कुछ नया लगता है तो मैं अपडेट करूंगा। यह सफल रहा।

6

2 तरीके कि मेरे लिए काम, जब मैं Primefaces में पेज लोड करने के बाद एक जे एस समारोह निष्पादित करने के लिए चाहते हैं:

  • या तो jQuery का उपयोग करें (के रूप में यह पहले से ही Primefaces द्वारा प्रयोग किया जाता है), सबसे अच्छा समाधान करने के लिए है घोंसला दस्तावेज़।
    • jQuery(document).ready(function() { jQuery(document).ready(function() { // twice in document.ready to execute after Primefaces callbacks PathFinder.findAndGo(); }); });
  • या का उपयोग पी: तैयार दो बार, ताकि मेरी जे एस कोड सभी Primefaces कोड के बाद मार डाला जाता है remoteCommand ऑटोरन साथ, और यह
    • पर JS कॉलबैक oncomplete जगह इस तरह फ़ॉर्म सबमिट किया जाता सर्वर से AJAX लेकिन कोई श्रोता सर्वर साइड पर मार डाला, एक JS कॉलबैक बाद में मार डाला जाता है
    • <p:remoteCommand oncomplete=" PathFinder.findAndGo(); " autoRun="true"/>
+2

प्राइमफेस को नियंत्रक में जावा कोड से जेएस निष्पादित करने का निर्देश देने का एक विकल्प भी है, लेकिन मुझे यकीन नहीं है कि यह पेज लोड के बाद निष्पादित किया गया है या नहीं। मैंने एजेक्स एक्शन में एक बार इस विकल्प का इस्तेमाल किया था, जब मैं प्राइमफेस को AJAX के बाद पृष्ठ शीर्षक अपडेट करने का निर्देश नहीं दे सका: 'org.primefaces.context.RequestContext.getCurrentInstance()। निष्पादित करें (" document.title = '"+ StringEscapeUtils.escapeEcmaScript (पेजटाइट) + "'");' – OndrejM

0

शामिल करें अपने <ui:define name="content"> और फिर भीतर jQuery पुस्तकालय (अपने पृष्ठ के तल पर) हमेशा की तरह $(document).ready का उपयोग करें:

<ui:define name="content"> 
 
... 
 
<!-- jQuery --> 
 
<h:outputScript name="vendor/jquery/jquery.min.js"/> 
 
<script> 
 
    $(document).ready(function(){ 
 
     alert(1); 
 
    }); 
 
</script> 
 
</ui:define>

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