2009-01-06 16 views
43

मैं प्रपत्र वर्तमान तत्व में है की घटना प्रस्तुत ट्रिगर करना चाहते हैं एक विधि मैं काम करता है पता है कभी कभी यह है:।क्या इस .form.submit(); के लिए एक बेहतर jQuery समाधान है ??

this.form.submit(); 

अगर वहाँ एक बेहतर समाधान है, संभवतः jQuery का उपयोग कर मैं सोच रहा हूँ, मैं के रूप में मैं प्रत्येक ब्राउजर में 100% निश्चित विधि काम नहीं करता हूं।

संपादित करें:

स्थिति मेरे पास है, इस प्रकार है:

<form method="get"> 
    <p><label>Field Label 
     <select onchange="this.form.submit();"> 
      <option value="blah">Blah</option> 
      .... 
     </select></label> 
    </p> 
</form> 

मैं <select> के परिवर्तन पर प्रपत्र प्रस्तुत करने में सक्षम होना चाहता हूँ।

जो मैं खोज रहा हूं वह एक ऐसा समाधान है जो किसी भी रूप में किसी भी रूप में फॉर्म पर आईडी या नाम जानने के बिना काम करता है। $('form:first') और $('form') काम नहीं करेंगे क्योंकि फॉर्म पेज पर तीसरा हो सकता है। इसके अलावा, मैं पहले से ही साइट पर jQuery का उपयोग कर रहा हूं, इसलिए jQuery का थोड़ा उपयोग करना एक बड़ा सौदा नहीं है।

तो, क्या jQuery को इनपुट/चयन/टेक्स्टरेरा फॉर्म को पुनर्प्राप्त करने का कोई तरीका है?

+0

आपके द्वारा पोस्ट की गई विधि हमेशा मेरे लिए काम करती है। –

+0

हां, यह क्यों नहीं होगा .form.submit() काम करते हैं? – marcovtwout

उत्तर

101

मुझे लगता है कि आप के लिए क्या देख रहे कुछ इस तरह है jQuery 1.3 या ऊपर का उपयोग नहीं कर रहे हैं, आप closest के बजाय parents पर कॉल कर सकते हैं।

+3

माता-पिता ("फॉर्म") के बजाय निकटतम ("फ़ॉर्म") का उपयोग करें। माता-पिता() तत्वों के सभी माता-पिता को प्राप्त करते हैं जो फॉर्म हैं, निकटतम() तत्व पहले तत्व को खाते हैं जो तत्व – TeKapa

+2

@TeKapa के माता-पिता हैं: धन्यवाद। jQuery 1.3 (जिसने 'निकटतम' फ़ंक्शन जोड़ा) प्रश्न के उत्तर देने के एक हफ्ते बाद आया। –

0

JQuery में आप

$("form:first").trigger("submit") 

कॉल कर सकते हैं पता नहीं है कि अगर ज्यादा बेहतर है। मुझे लगता है form.submit(); बहुत सार्वभौमिक है।

3

तुम हमेशा JQuery-ize अपने form.submit कर सकते हैं, लेकिन यह सिर्फ एक ही बात कह सकते हैं:

$("form").submit(); // probably able to affect multiple forms (good or bad) 

// or you can address it by ID 
$("#yourFormId").submit(); 

भी कर सकते हैं प्रस्तुत घटना के लिए attach काम करता है, लेकिन यह है कि एक अलग अवधारणा है।

+0

प्रश्न कहता है कि वह यह – Amala

+1

नहीं करना चाहता है यह निश्चित रूप से अब करता है। यह उस संपादन में था जो मेरे उत्तर जमा होने के एक दिन बाद हुआ था। – patridge

24
this.form.submit(); 

यह शायद आपकी सबसे अच्छी शर्त है। विशेष रूप से यदि आप पहले से ही अपने प्रोजेक्ट में jQuery का उपयोग नहीं कर रहे हैं, तो इस उद्देश्य के लिए इसे (या कोई अन्य जेएस लाइब्रेरी) जोड़ने की आवश्यकता नहीं है।

1

आपका प्रश्न कुछ हद तक भ्रमित करने में है कि आप "वर्तमान तत्व" से क्या मतलब समझते हैं।

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

लेकिन यदि आपके पास एक फॉर्म पर एकाधिक "सबमिट" बटन हैं और कोई अन्य इनपुट नहीं है (उदाहरण के लिए "पंक्ति संपादित करें" और/या "पंक्ति में पंक्तियां हटाएं" बटन), तो आपके द्वारा पोस्ट की गई रेखा इसे करने का तरीका हो सकती है ।

एक और तरीका है (कोई जावास्क्रिप्ट आवश्यक) अपने सभी बटन (कि "submit" प्रकार के होते हैं) को अलग-देने के लिए हो सकता है। इस तरह:

<form action="..."> 
    <input type="hidden" name="rowId" value="..."> 
    <button type="submit" name="myaction" value="edit">Edit</button> 
    <button type="submit" name="myaction" value="delete">Delete</button> 
</form> 

आप एक बटन केवल प्रपत्र युक्त बटन प्रस्तुत किया जाएगा, और केवल बटन का मूल्य आप हिट भी भेजे जाएंगे (अन्य इनपुट मानों साथ) पर क्लिक करें।

फिर सर्वर पर तुम सिर्फ चर "myaction" का मान पढ़ सकते हैं और क्या करना है तय।

$(field).closest("form").submit(); 

उदाहरण के लिए, onchange घटना को संभालने के लिए, तो आप इस के लिए होता है:

$(select your fields here).change(function() { 
    $(this).closest("form").submit(); 
}); 

हैं, तो कुछ आप कारण के लिए

3

Matthew's जवाब देने के लिए इसी प्रकार, मैं सिर्फ पाया है कि आप निम्न कर सकते हैं:

$(this).closest('form').submit(); 

गलत: माता-पिता कार्यक्षमता का उपयोग के साथ समस्या यह है कि क्षेत्र नहीं काम करने के लिए प्रपत्र के भीतर तुरंत होने के लिए (की जरूरत है टीडीएस, लेबल, आदि के अंदर)।

मैं सही खड़ा हूं: पैरेंट एस (एस के साथ) भी काम करता है। Thxs Paolo यह इंगित करने के लिए।

+0

अभिभावक ('फ़ॉर्म') के साथ जो आपने कहा वह सच हो सकता है, लेकिन माता-पिता ('फॉर्म') के साथ यह काम करना चाहिए भले ही यह क्षेत्र टीडी के अंदर है, आदि –

+0

माता-पिता ('फॉर्म') सभी को वापस नहीं करेंगे ऐसे तत्व हैं जो इस तत्व के माता-पिता हैं? वह संभावित रूप से एक बाहरी रूप प्रस्तुत करेगा जिसे आपने अभी तक सबमिट करने का इरादा नहीं किया था। – StriplingWarrior

+0

बस इस पर आया और यह जोड़ना चाहता हूं कि आपके पास रूपों के रूप में फॉर्म नहीं होना चाहिए। यह अमान्य है और आईई में काम नहीं करेगा। इसलिए 'माता-पिता ("फॉर्म") का उपयोग करना पूरी तरह स्वीकार्य है, हालांकि मुझे नहीं पता कि यह निकटतम ("फॉर्म") की तुलना में कितना कुशल है। – ClarkeyBoy

0
<form method="get"> 
    <p><label>Field Label 
     <select onchange="this.form.submit();"> 
     <option value="blah">Blah</option> 
      .... 
    </select> 
    </label> 
    </p> 
    **<!-- <input name="submit" type="submit" /> // name="submit_new_name" -->** 
    </form> 

<!-- 

    this.form.submit == this.form.elements['submit']; 

--> 
2

मैं ने पाया है कि jQuery सबसे अच्छा समाधान का उपयोग कर

$(this.form).submit() 

है इस बयान jQuery प्लगइन्स का उपयोग करना (जैसे jquery form plugin) सही ढंग से काम करता है और jQuery डोम traversing भूमि के ऊपर कम से कम है।

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