2012-03-07 9 views
21

कुछ विचार ये हैं कि ELEMENT_ID.focus() divs के अंदर है जो कुछ समय पर छिपा हुआ है।jquery के लिए कुछ कारण क्या हैं। फोकस() काम नहीं कर रहे हैं?

इस को हल करने के लिए एक आसान समस्या नहीं होनी चाहिए - लेकिन मैं :(

*** कोड ठीक काम करता है के लिए संघर्ष कर रहा हूँ -। है पाठ क्षेत्र अप पेज लोड हो रहा है पर पर ध्यान केंद्रित नहीं किया जा रहा

के लिए Step1 [हल] JavaScript:

$("#goal-input").focus(); 

$('#goal-input').keypress(function(event){ 
var keycode = (event.keyCode ? event.keyCode : event.which); 
    if(keycode == '13') { 
etc, etc, etc 
} 

एचटीएमएल

<input type="text" id="goal-input" name="goal" /> 

[Step2] JavaScript:

if (goal) { 
      step1.fadeOut('fast', function() { 
      step1.hide(); 
      step2.fadeIn('fast'); 

etc, etc 

HTML:

<div id="step-2"> 
     <div class="notifications"> 
     </div> 
     <input type="text" id="name" name="name" placeholder="Name" /> 
       <script type="text/javascript"> 
       $(function(){ 
       $("#name").focus(); 
       }); 
      </script> 

क्यों 2 काम कदम नहीं करता है? , हालांकि

$("#elementid").filter(':visible').focus(); 

यह अधिक अर्थपूर्ण हो सकता है तत्व दृश्यमान बनाने के लिए: :(

+3

कुछ नमूना कोड के बारे में कैसे? - ['। फोकस()'] (http://api.jquery.com/focus/) पर jQuery दस्तावेज़ों के अनुसार: 'किसी छुपे तत्व पर फ़ोकस सेट करने का प्रयास इंटरनेट एक्सप्लोरर में एक त्रुटि का कारण बनता है। दिखाई देने वाले तत्वों पर केवल फोकस() का उपयोग करने के लिए सावधानी बरतें। तत्व पर ध्यान केंद्रित किए बिना तत्व के फोकस ईवेंट हैंडलर को चलाने के लिए, .focus() के बजाय .triggerHandler ("फोकस") का उपयोग करें। ' – Morgon

+0

आपका क्या मतलब है "काम नहीं कर रहा"? जैसे, क्या किसी भी त्रुटि के बिना कोड चलाया जाता है लेकिन फोकस सेट के रूप में सेट नहीं होता है, या ब्राउज़र त्रुटि देता है? – nnnnnn

+0

ने नमूना कोड प्रदान किया और "काम नहीं कर रहा" का अर्थ है (टेक्स्ट फ़ील्ड पर केंद्रित नहीं है) @nnnnnn – dngoo

उत्तर

12

अगर दस्तावेज़ लोड घटना का उपयोग कर आप या तो HTML या लोड नीचे कोड रखना होगा:।

<input type="text" id="goal-input" name="goal" /> 
<script type="text/javascript"> 
$(function(){ 
    $("#goal-input").focus(); 
}); 
</script> 

अपडेट:

स्विचिंग divs दस्तावेज़ लोड ईवेंट को ट्रिगर नहीं करता है क्योंकि सब कुछ पहले ही लोड हो चुका है। आप इसे ध्यान केंद्रित करने के लिए जब आप div स्विच की जरूरत है:

if (goal) { 
     step1.fadeOut('fast', function() { 
      step1.hide(); 
      step2.fadeIn('fast', function() { 
       $("#name").focus(); 
      }); 
     }); 
} 
+2

मैं कहूंगा कि सभी डोम से संबंधित कोड हमेशा अपने लक्ष्य के सापेक्ष स्थिति के बावजूद, डोम लोड हैंडलर के अंदर जाना चाहिए। :) – Morgon

+0

डेमो: http://jsfiddle.net/BXpkY/ –

+0

यह दर्शाता है कि केवल 'div' को छिपाने और दिखाने के लिए '$। फोकस()' फायरिंग बदलना चाहिए: http://jsfiddle.net/3Sz8Z/ –

3

जब आप उस तरह से ध्यान केंद्रित करता है, तो तत्व छिपा है आवेदन कर रहे हैं कुछ इस तरह की कोशिश करें, यह एक त्रुटि फेंक नहीं होगा कि अपने लेआउट के लिए विशिष्ट कोड की आवश्यकता होगी

5

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

$("#elementid").show(); 
$("#elementid input[type=text]").focus(); 
25

मैं एक तत्व (एक फार्म इनपुट) उस पृष्ठ में संक्रमण हो गया था पर ध्यान केंद्रित करने को ट्रिगर समस्या थी। मैंने पाया कि फोकस इवेंट को एक सेटटाइमआउट के अंदर से कोई देरी नहीं होने के कारण फिक्स करने योग्य था। जैसा कि मैं इसे समझता हूं (उदाहरण के लिए, this answer), यह वर्तमान निष्पादन कतार समाप्त होने तक फ़ंक्शन में देरी करता है, इसलिए इस मामले में यह संक्रमण पूरा होने तक फोकस ईवेंट में देरी करता है।

setTimeout(function(){ 
    $('#goal-input').focus(); 
}); 
+0

यह मेरे लिए काम किया, टाई! –

+0

शानदार विचार ... –

+0

मुझे काम शुरू करने से पहले 600 के टाइमआउट का उपयोग करना पड़ा, इसलिए 'setTimeout (function() {$ (' # target-input ')। फोकस();}, 600); 'में उदाहरण के ऊपर। – SharpC

3

मैंने पाया कि focus जब (ऐसी सूचना div के रूप में) एक पाठ तत्व पर ध्यान देने के प्राप्त करने की कोशिश काम नहीं करता है, लेकिन जब इनपुट फ़ील्ड पर ध्यान केंद्रित कर काम करता है।