2009-03-25 7 views
9

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

$ (document) .ready मैं इन घटनाओं ऊपर तार के अंदर:

$(window).blur(function(){ 
    WindowHasFocus =false; 
}).focus(function(){ 
    WindowHasFocus =true; 
}); 

तो फिर, अगर डेटा अद्यतन किया जाता है, मैं इस समारोह फोन:

function FocusInput(){ 

if(!WindowHasFocus){ 
    $(window).focus(); 
} 
} 

यह काम करता है IE8 में अपेक्षा के अनुरूप, लेकिन फ़ायरफ़ॉक्स (और अन्य सभी ब्राउज़रों) में अगर मैं पैरेंट विंडो पर क्लिक करता हूं तो ब्लर इवेंट नेवर आग लगते हैं। यह कैसे प्राप्त करने के बारे में कोई सुझाव/विचार?

अद्यतन:

कुल facepalm पल: फ़ायर्फ़ॉक्स में: * उपकरण * विकल्प ... * सामग्री टैब * उन्नत बटन "जावास्क्रिप्ट सक्षम करें" के आगे * नामक बॉक्स में "बढ़ाना या घटाना विंडोज "

+0

अपना उत्तर एक अलग उत्तर में रखें ताकि हम इसे ऊपर उठा सकें और अनुत्तरित सूची से प्रश्न प्राप्त कर सकें। –

उत्तर

2

कुल facepalm पल: फ़ायर्फ़ॉक्स में:

  • उपकरण
  • विकल्प ...
  • सामग्री टैब
  • उन्नत बटन
  • चेक बॉक्स नाम "उठाएँ" जावास्क्रिप्ट सक्षम करें "के बगल में या निचला विंडोज़ "

यह डी द्वारा बंद कर दिया गया है गलती और सक्षम होना चाहिए। और, मुझे लगता है कि चूंकि यह क्रोम में काम नहीं करता है, इसलिए सफारी वही होगी, लेकिन आप जानते हैं कि वे "मानते हैं" के बारे में क्या कहते हैं (यह सफारी में काम करता है, लेकिन क्रोम नहीं)।

1

ऐसा लगता है कि आपको यह जानना नहीं चाहिए कि आपकी खिड़की धुंधली हो गई है। जब आपका डेटा अपडेट होता है, तो आपकी खिड़की या तो फोकस में नहीं होती है, इस मामले में आप इसे फोकस करना चाहते हैं, या यह पहले से ही फोकस में है, और इसे फिर से केंद्रित करने से आपको कोई चोट नहीं पहुंची है।

+0

अच्छी तरह से, तर्क यह है कि बच्चे की खिड़की में एक टेक्स्ट इनपुट होता है, और मैं नहीं चाहता कि उस पर ध्यान केंद्रित किया जाए। लेकिन किसी भी मामले में, $ (विंडो)। फोकस() एफएफ में कुछ भी नहीं प्रतीत होता है। –

+1

क्या आपने jquery कॉल के बिना 'window.focus() 'करने का प्रयास किया था? – levik

2

यदि दो अलग-अलग विंडो रखने के लिए कोई मजबूत कारण नहीं है तो यह बेहतर होगा "मोडल बॉक्स", वहां बहुत सारे उदाहरण हैं और इसे प्राप्त करने के लिए jQuery प्लगइन्स हैं। इस तरह के एक प्लगइन का एक उदाहरण: http://www.84bytes.com/2008/06/02/jquery-modal-dialog-boxes/

+0

एक मॉडल का उपयोग नहीं कर सकता, यह एक अलग खिड़की होना चाहिए। –

+1

उस स्थिति में पैरेंट विंडो से फ़ोकस कॉल करने का प्रयास करें: url = 'someUrl' newWin = window.open (url, "helpwin", "features"); ... newWin.window.focus() – Miquel

+0

एक मजबूत कारण सुरक्षा है: मूल विंडो नियमित रूप से 'http' हो सकती है और उसे 'https' वाली विंडो खोलने की आवश्यकता होती है। – JohnK

1

आप बिल्कुल सही कर रहे हैं। एफएफ में, ऐसा लगता है कि यह घटना को आग लगाता है, लेकिन उसी समय, ऐसा लगता है कि यह तत्व को ध्यान केंद्रित करने के रूप में पंजीकृत नहीं करता है। इसलिए धुंधला घटना कभी नहीं निकाल दी जा सकती है। यकीन नहीं है कि मैं यह भी सही ढंग से समझा रहा हूं ... निम्नलिखित कोड यह सब कहता है।

इस उदाहरण में, बॉक्स डिफ़ॉल्ट रूप से छिपा हुआ है, लेकिन फ़ोकस ईवेंट श्रोता के माध्यम से प्रदर्शित होता है। आईई 8 में, यदि आप मुख्य विंडो पर क्लिक करें, यह अभी भी कलंक आग, लेकिन एफएफ में ऐसा नहीं होता:

<html> 
<head> 

</head> 
<body> 
    <div id="hiddenWin" style="width: 100px; height: 100px; background-color: Black; display: none;"></div> 

    <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script> 
    <script type="text/javascript"> 
     var something = 12; 
     something += 4; 

     $(document).ready(function()   
      { 

       $("#hiddenWin").focus(function() 
        { 
         $(this).show(); 
        } 
       ).blur(function() 
        { 
         $(this).hide(); 
        }    
       )    

       $("#hiddenWin").focus(); 
      } 
     ); 
    </script> 

</body> 
</html> 

अपनी जरूरत के लिए, यह सेटअप करने के लिए एक ओवरले पृष्ठभूमि संभव हो सकता है? कुछ जो एक निश्चित स्थिति @ शीर्ष: 0 और बाएं: 0 है जो पूरी स्क्रीन लेता है और इसमें एक जेड-इंडेक्स है जो आपके पॉपअप से कम है। इस तरह, जब वे ओवरले पर क्लिक करते हैं, तो यह फोकस चुरा लेगा और फिर आप सबकुछ छुपा सकते हैं ...? आईडीके, बस एक सुझाव। मैं चारों ओर गड़बड़ कर रखूंगा और देख सकता हूं कि मैं इसे समझ सकता हूं या नहीं। अच्छा प्रश्न।+1

+0

नहीं, विचार है कि व्यक्ति को वेबसाइट ब्राउज़ करने दें और केवल डेटा विंडो होने पर ही बच्चे की खिड़की को सामने लाएं। –

+0

पाया यह ... im एक बेवकूफ: फ़ायर्फ़ॉक्स में: * उपकरण * विकल्प ... * सामग्री टैब * उन्नत बटन "जावास्क्रिप्ट सक्षम करें" के आगे * नामक बॉक्स में "बढ़ाना या घटाना विंडोज" –

0

हाँ मॉडल चीज शायद जाने का तरीका है लेकिन कभी-कभी आपको इसे करने की ज़रूरत होती है।

मैं सादे पुरानी जावास्क्रिप्ट का उपयोग करूंगा। खिड़की का नाम दें और इसे फोकस में लाएं।

function showImageWindow(imageURL) 
    { 
     var imageWindow = window.open(imageURL,"My_Window","width=1000px,height=1000px,menubar=0,titlebar=0,toolbar=0,location=0,scrollbars=0,status=0"); 
     imageWindow.focus(); 
    } 
संबंधित मुद्दे