jquery

2008-11-06 23 views
32

का उपयोग कर फ़ॉर्म में पहले नियंत्रण पर फ़ोकस करना jquery का उपयोग करते हुए मैं पृष्ठ को लोड करते समय फॉर्म में पहले तत्व (फ़ील्ड, टेक्स्ट एरिया, ड्रॉपडाउन फ़ील्ड, आदि संपादित करें) पर कैसे ध्यान केंद्रित करूं?jquery

कुछ की तरह:

document.forms[0].elements[0].focus(); 

लेकिन का उपयोग कर jQuery।

एक और आवश्यकता, फॉर्म को श्रेणी = "फ़िल्टर" होने पर पहले तत्व पर ध्यान केंद्रित न करें।

उत्तर

32

पृष्ठभूमि के लिए मैंने रेल में ऐप पर स्क्रिप्ट का उपयोग किया था। अपने सभी जवाब की कोशिश के बाद और पता चला कि वे सभी नहीं काम करता है, गूगल पर एक खोज के साथ मैं इस स्निपेट नहीं मिली काम करता है कि:

$(function() { 
    $("form:not(.filter) :input:visible:enabled:first").focus(); 
}); 

यह $('form :input:first') मैच छिपे हुए इनपुट कि बाहर बारी रेल हर रूप में डालें।

+0

ऐसा लगता है कि "चयन करें" नियंत्रणों को अनदेखा करें। – CodeGrue

+0

नहीं, यह "चयन" नियंत्रण के साथ काम करता है। –

+0

यह आकर्षण की तरह काम करता है – Ravia

66
$('form:not(.filter) :input:visible:enabled:first').focus() 

यह पहला दृश्य इनपुट तत्व (<input />, <select>, <textarea>) कहते हैं कि इसमें वर्ग filter नहीं है का चयन करेंगे।

+0

'सक्षम' जोड़ना – JochenJung

+0

@ जोचनजंग अच्छा बिंदु जोड़ने के लिए एक अच्छा फ़िल्टर हो सकता है। अपडेट किया गया। – nickf

13

मैं अपने चुने हुए तत्व को कक्षा के साथ चिह्नित करना चाहता हूं और पृष्ठ पर तत्वों के क्रम में इसे छोड़ने के बजाय कक्षा द्वारा चयन करना चाहता हूं। मुझे लगता है यह बहुत आसान है मेरी "क्या असली पहला तत्व है" एल्गोरिथ्म अद्यतन करने के लिए जब तत्व छिपा हुआ है कि हो सकता है या नहीं किया जा सकता या, ढांचे द्वारा इंजेक्शन नहीं किया जा सकता का चयन याद करने की कोशिश कर रहा से ...

$(document).ready(function() { 
    $('input.js-initial-focus:first').focus(); // choose first just in case 
    }); 
+0

बहुत अच्छी टिप क्योंकि मैं टेक्स्टबॉक्स/इनपुट के नीचे आने पर पहले ड्रॉपडाउन/चयन-टैग केंद्रित नहीं करना चाहता हूं। इस प्रकार मैं टेक्स्टबॉक्स को एक वर्ग = "प्रारंभिक-फोकस" देता हूं। इसके अलावा ज़कारिया से jquery समाधान एक एएसपी के साथ काम नहीं करता है।नेट एमवीसी ड्रॉपडाउनलिस्ट क्योंकि जब संवाद खुलता है तो एक सत्यापन त्रुटि होती है: कोई तत्व चयनित नहीं होता है। लेकिन यह सच नहीं है ... – Pascal

+2

FWIW - अब मैं कक्षाओं को प्रीपेड करता हूं जो स्टाइल के लिए उपयोग की जाने वाली कक्षाओं से अलग करने के लिए "जेएस" के व्यवहार के लिए उपयोग किए जाते हैं। व्यवहार के लिए शैली वर्गों का पुन: उपयोग नहीं करना एक अच्छा अभ्यास है और इससे इसे रोकने में मदद मिलती है। – tvanfosson

3

यह एक लाइन समाधान नहीं है, लेकिन यह असली पहले उपयोगकर्ता इनपुट क्षेत्र के ध्यान में लेता है (यह हो सकता है < इनपुट/> या < > टैग का चयन करें)।

आपको इसे थोड़ा और अधिक ट्विक करना होगा और आपको जो चाहिए वह आपको मिल जाएगा।

पीएस: मैंने फ़ायरफ़ॉक्स, क्रोम और आईई 6 में इस कोड का परीक्षण किया है।

function focusFirstFormField() { 
    try { 
     var selector = $("#formid"); 
     if (selector.length >= 1 && selector[0] && selector[0].elements && selector[0].elements.length > 0) { 
      var elements = selector[0].elements; 
      var length = elements.length; 
      for (var i = 0; i < length; i++) { 
       var elem = elements[i]; 
       var type = elem.type; 

       // ignore images, hidden fields, buttons, and submit-buttons 
       if (elem.style.display != "none" /* check for visible */ && type != "image" && type != "hidden" && type != "button" && type != "submit") { 
        elem.focus(); 
        break; 
       } 
      } 
     } 
    } 
    catch(err) { /* ignore error if any */ } 
} 
0

मैं jQuery संवाद किस पृष्ठ पर अदृश्य थे, लेकिन अभी भी चयनकर्ता द्वारा चयन किया गया था के साथ कुछ समस्या थी:

$(":text:visible:enabled:first").focus(); 

चारों ओर खेलने के बहुत बाद मैं अंत में एक समाधान है कि सभी बाहर रखा के साथ आया था । छोर पर एक ".not() जोड़कर .dialog के एक वर्ग के साथ divs में आदानों यह किसी और के लिए उपयोगी हो सकता है यह मेरा चयनकर्ता है:।

$(":text:visible:enabled:first").not("div .dialog input").focus(); 
1
$("form").find('input[type=text],textarea,select').filter(':visible:first').focus();