2010-04-06 13 views
23

मैं एक सबमिट बटन चाहता हूं जो बटन पर प्रदर्शित होने से भिन्न मूल्य प्रस्तुत करता है। <input type="submit"> के साथ आप ऐसा नहीं कर सकते हैं। <button type="submit"> के साथ, हालांकि, यह दो अलग-अलग मान हो सकते हैं। सवाल यह है कि क्या यह सभी ब्राउज़रों में काम करेगा?<बटन प्रकार = "सबमिट करें"> संगतता?

इस परीक्षण कोड की कोशिश कर रहा यहाँ:

<form method="get" action=""> 
    <input type="text" name="txt"/> 
    <button type="submit" name="btn" value="val">text</button> 
</form> 

एफएफ 3.6 में यह अद्यतन करता है दोनों मूल्यों को उचित रूप के साथ अपने पता बार (और प्रतिक्रिया करता है मेरे लिए पाठ बॉक्स में दर्ज दबाने)। आईई 8 में, यह एंटर दबाकर भी स्वीकार करता है, पता बार में टेक्स्ट वैल्यू प्रदर्शित करता है, लेकिन यह बटन के मान को जीईटी परम के रूप में नहीं दिखाता है ... क्या इसका मतलब यह है कि यह सबमिट नहीं कर रहा है?


मैं छिपे हुए इनपुट का उपयोग नहीं कर सकता क्योंकि मुझे यह निर्धारित करने की आवश्यकता है कि जेएस के बिना कौन सा बटन क्लिक किया गया है।


टेस्ट 2:

<form method="get" action=""> 
    <input type="text" name="txt"/> 
    <button type="submit" name="submit1" value="submit1">submit</button> 
    <input type="submit" name="submit2" value="submit2"/> 
    <input type="submit" name="submit3" value="submit3"/> 
</form> 

IE8 में, प्रवेश बटन के किसी भी प्रस्तुत नहीं करता है मार, लेकिन एक मूल्य भेज देंगे submit1 क्लिक करें। यह "सबमिट" भेज देगा, न कि "submit1" जो एफएफ के साथ असंगत है। हालांकि, फॉर्म सबमिट करने से केवल एक बटन दोनों ब्राउज़रों में मूल्य भेजता है, जिसका अर्थ है कि मैं को देख सकता हूं जो बटन को चेक करके क्लिक किया गया था कि GET['submitX'] इसके बजाय मौजूद है या नहीं! प्रवेश दर्ज करने पर क्रोम का थोड़ा अलग व्यवहार है (बटन 2 सबमिट करता है)। ओपेरा एफएफ के साथ संगत लगता है ... लेकिन सभी 4 ब्राउज़र केवल एक बटन सबमिट करते हैं। मेरे पास इंस्टॉल किए गए ब्राउज़र के पहले संस्करण नहीं हैं .... क्या किसी को पता है कि यह पिछले संस्करणों, खासकर आईई 6 में काम करता है?

+0

आप उपयोग करना चाहते मत '' बजाय? – vooD

+0

@vooD: नहीं ... विचार यह है कि मैं पेज पर एकाधिक सबमिट बटन रखना चाहता हूं, और मुझे जावास्क्रिप्ट के उपयोग के बिना अलग-अलग चीजें करने की आवश्यकता है। – mpen

+1

आईई 5 और आईई 6 में परीक्षण करने के लिए और यदि आप विंडोज चल रहे हैं, तो आप हमेशा आईई परीक्षक @ http://www.my-debugbar.com/wiki/IETester/HomePage – balexandre

उत्तर

11

पुरानी पोस्ट लेकिन मुझे लगता है कि यहां एक समाधान है जो यहां याद किया गया है। button[type=submit] में असंगत व्यवहार के साथ हमेशा समस्याएं होती हैं, खासकर पुराने आईईएस के साथ, और @ मार्क के परीक्षणों से ऐसा लगता है कि हमें अभी भी समस्याएं हैं।

इसके बजाय आप input[type=submit] की विशेषता के लिए दो अलग-अलग मानों का उपयोग कर सकते हैं और सही कार्रवाई प्राप्त करने के लिए इन सर्वर-पक्ष को पार्स कर सकते हैं। उदाहरण के लिए, आप कर सकते हैं:

<form method="get" action=""> 
    <input type="text" name="txt"/> 
    <input type="submit" name="action[do_something]" value="Do Something Cool"/> 
    <input type="submit" name="action[do_another]" value="Do Something Dangerous"/> 
</form> 

केवल सफल (क्लिक किया या डिफ़ॉल्ट) नाम-मान युग्म तो सबमिट हो जाता है कहते हैं, पीएचपी में आप आसानी से की तरह कुछ कर सकते हैं:

<?php 
if (isset($_GET['action']['do_something'])) { 
    // do something 
} else { 
    // do another thing 
} 
?> 

नोट डिफ़ॉल्ट कार्रवाई हमेशा स्रोत में दिखाई देने वाली पहली होगी।

+0

मैंने अतीत में यह सटीक दृष्टिकोण लिया है; मुझे लगता है कि मैं एक क्लीनर/अधिक अर्थपूर्ण समाधान की तलाश में था लेकिन कम से कम यह विश्वसनीय रूप से काम करता है। – mpen

+0

क्या आपको पता है कि आईई बटन किस प्रकार करता है [टाइप = सबमिट] समस्या लागू होती है? – Zubzob

+1

@Zubzob ऐसा लगता है कि यह 'क्विर्क' मोड में IE8 पर लागू होता है। तो यदि आप आईई 8 में हैं और ड्यूट टाइप को (कहें) एचटीएमएल 5 निर्दिष्ट नहीं करते हैं तो आप बटन टेक्स्ट पोस्ट करेंगे। मानकों मोड पर स्विच करें और आप 'मान' विशेषता पोस्ट करेंगे। आईई 6 और आईई 7 + विनएक्सपी के साथ कुछ त्वरित परीक्षण बटन बटन को प्रस्तुत किया गया है कि आधुनिक डॉक्टरेट का उपयोग किया गया था या नहीं। – contrebis

1

छिपे हुए फ़ील्ड का उपयोग करें, वे इसे करने का सबसे अच्छा तरीका हैं।

<input type="hidden" value="any value you want to enter" /> 
+0

का उपयोग कर सकते हैं, यह मुझे 2 अलग-अलग vals कैसे देता है बटन मैंने क्लिक किया? मुझे पता है कि मैंने क्यू में अपना इरादा स्पष्ट नहीं किया है, लेकिन यही वह है जो मैं कर रहा हूं। – mpen

+2

और बटन जोड़ें लेकिन नाम केवल – Saleh

+0

बदलें, ऐसा लगता है कि यह एक वास्तविक समाधान हो सकता है। आदर्श नहीं, लेकिन व्यावहारिक। – mpen

10

यदि आप बटन टैग का उपयोग करने के बारे में सुनिश्चित नहीं हैं तो यहां एक विकल्प है।

<form method="get" action=""> 
    <input type="text" name="txt" /> 
    <input type="hidden" name="myinput" value="myvalue" /> 
    <input type="submit" name="submit" /> 
</form> 

यह के रूप में के रूप में कुछ ब्राउज़र वास्तव में अपने मूल्य विशेषता बटन टैग के बजाय के अंदर पाठ प्रस्तुत एक बटन टैग की तुलना में अधिक स्थिर रहेगी। उदाहरण के लिए

<button name="mybutton" type="submit" value="one">Two</button> 

कुछ ब्राउज़रों में, आपके पास "एक" सबमिट किया जाएगा, अन्य में, "दो"।

आप विशेष बटन दबाया के आधार पर सशर्त कार्य करना चाहते हैं, तो आप इनपुट पर पाठ के आधार पर ऐसा करने के लिए होता है ...

इस उदाहरण में, प्रदर्शन पाठ ("बटन 1" या "बटन 2") वापस पोस्ट किया जाएगा।

फ़ायरफ़ॉक्स: "txt = & प्रस्तुत = बटन + 1" आईई: "txt = & प्रस्तुत = बटन + 1" सफारी: "txt = & प्रस्तुत = बटन + 1"

और शीघ्र।दो फॉर्म तत्वों को देना एक ही नाम आम तौर पर ब्राउज़र के रूप में संभव होने के रूप में संभव होने के रूप में स्वीकार किया जाता है। हालांकि औपचारिक रूप से दस्तावेज नहीं किया गया है, इसलिए आपको यह तय करना होगा कि आप इस पर कार्य करना चाहते हैं या नहीं।

अंतिम विकल्प के रूप में, क्या कोई कारण है कि आप उन्हें एक फॉर्म फ़ील्ड नहीं दे सकते हैं कि उन्हें दो बटन होने के बजाय नियंत्रण प्रवाह चुनने दें?

<form method="get" action=""> 
    <input type="text" name="txt" /> 
    <select name="myname"> 
     <option value="A">A</option> 
     <option value="B">B</option> 
    </select> 
    <input type="submit" name="submit" value="Go" /> 
</form> 

अद्यतन

आप मामले यदि आप अपनी टिप्पणी में उल्लेख के लिए दो बटन चाहते हैं ... प्रपत्र एक के आधार पर कुछ ताज़ा करने के लिए नीचे यानी एक बटन आधे रास्ते आदानों के उप-समूह और नीचे सबमिट करने के लिए एक और बटन, इस प्रकार आपको चीजें करना चाहिए ...

1) बटन दोनों एक ही काम करना चाहिए - बस फॉर्म सबमिट करें।

2) यदि आपके पास वैध फॉर्म है (यदि वे अनुक्रमिक रूप से काम कर रहे हैं और दो सबमिटों में से पहला को मारा है, तो आपको सर्वर के पक्ष का पता लगाना चाहिए, आपके पास फॉर्म के दूसरे भाग के लिए रिक्त इनपुट होंगे - इसे अमान्य प्रस्तुत करना)।

3) यदि आपके पास अपनी टिप्पणी में उल्लिखित गणना या रीफ्रेश करने के लिए पर्याप्त जानकारी है तो आपको सर्वर-साइड का पता लगाना चाहिए।

मामलों 2 और 3 में, आपको उन फ़ील्ड को चिह्नित करना चाहिए जो उपयोगकर्ता के आगे बढ़ने के लिए आवश्यक हैं।

यह विशेष बटन करने के लिए विशेष बटनों की आवश्यकता को अस्वीकार करता है - उपयोगकर्ता फॉर्म के पहले भाग में टाइप कर सकता है और फिर भी नीचे बटन दबा सकता है - इसलिए आप अपने तर्क को आधार पर नहीं रखना चाहते हैं कि कौन सा बटन था दब गया।

+5

वह उड़ाता है। मानकों के लिए बहुत कुछ। – mpen

+0

मैंने कुछ अतिरिक्त जानकारी जोड़ी हैं जो उपयोग की जा सकती हैं - दो बटनों के बारे में आपके नोट के आधार पर। मुझे उम्मीद है यह मदद करेगा। – Fenton

+0

हाँ, मैं * प्रदर्शित पाठ पर बेसिंग * से बचना चाहता हूं। क्या होगा यदि मैं उन्हें दोनों एक ही पाठ रखना चाहता हूं? या क्या होगा यदि पाठ गतिशील है या अजीब अक्षर हैं? मैं कोड के साथ प्रदर्शन तर्क मिश्रण नहीं करना पसंद करता हूं (प्रदर्शन के लिए केवल एक मूल्य होना चाहिए)। एक लचीला समाधान की तलाश में ... यह एक ढांचे में जा रहा है। मैं या तो एक चुनिंदा बॉक्स नहीं चाहता, यह उपयोगकर्ताओं को धीमा कर देता है;) – mpen

-2

सबमिट करने के बटनों को मान संलग्न न करें। सबमिट बटन वाला एक बटन एक फॉर्म सबमिट करता है। यह सब कुछ करता है और कभी भी ऐसा करने की आशा करनी चाहिए। किसी भी रूप का कोई सबमिशन विधि उद्देश्य और डेटा स्कोप में उसी फॉर्म के सभी अन्य सबमिशन विधियों के बराबर है। एचटीएमएल के इरादे से तार्किक रूप से सही होने के लिए आपको अलग-अलग रूपों का उपयोग करने की आवश्यकता है यदि आप अलग-अलग डेटा को जमा करने पर सशर्त रूप से लौटाना चाहते हैं।

मुझे लगता है कि मेरा जवाब असुविधाजनक है लेकिन जावास्क्रिप्ट का उपयोग करके छिपे हुए इनपुट फ़ील्ड को जोड़ने और हटाने के बिना यह एकमात्र सही उत्तर है।

+0

मैं असहमत हूं। आप अर्थशास्त्र का बहस कर रहे हैं, लेकिन ऐसे समय होते हैं जब अंगूठे के नियमों को तोड़ने की आवश्यकता होती है। एचटीएमएल स्वयं semantically दोषपूर्ण है; इसे अर्थपूर्ण मार्कअप * और * डिस्प्ले लॉजिक के मिश्रण के रूप में डिज़ाइन किया गया था, इसलिए कौन सा * इच्छित * की परवाह करता है? यह वर्ष 2010 है! मैं * काम * और * संभव * के बारे में पूछ रहा हूं, क्योंकि हम एक आदर्श दुनिया में नहीं रहते हैं :) – mpen

+0

फिर मेल मार्कअप भाषा का समर्थन करें http://mailmarkup.org/ –

+0

एमएमएल? मैं यहां एक ईमेल फॉर्म नहीं बना रहा हूं ... यदि कुछ भी मैं एक्सएमएल और एक्सएसएलटी का उपयोग करता हूं। – mpen

6

यह आईई

<button type="submit" name="submit1" value="submit1" onclick="this.value='submit1' ">submit</button> 

सरल और काम करता है पर चाल करना होगा सभी ब्राउज़रों

+1

मुझे लगता है कि मैं जेएस से बचने की कोशिश कर रहा था ... – mpen

1

पर यह है कि मैं क्या इस समस्या के लिए किया था। यह ब्राउज़रों में काम करता है।

<form method="get" action=""> 
    <input type="text" name="txt"/> 
    <input type="hidden" name="btn" id="hiddenbtn" /> 
    <button type="submit" name="btn1" value="val">text</button> 
</form> 

जावास्क्रिप्ट (jQuery की आवश्यकता है):

$(document).ready(function{ 
    $(":submit[name='btn1']").on("click", function() { 
     $("#hiddenbtn").val($(this).val()); 
    }); 
}); 
संबंधित मुद्दे