2008-08-01 27 views
229

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

उदाहरण:

<form> 
 
    <!-- put your cursor in this field and press Enter --> 
 
    <input type="text" name="field1" /> 
 

 
    <!-- This is the button that will submit --> 
 
    <input type="submit" name="prev" value="Previous Page" /> 
 

 
    <!-- But this is the button that I WANT to submit --> 
 
    <input type="submit" name="next" value="Next Page" /> 
 
</form>

मैं करना चाहते हैं क्या, तय करने के लिए कौन सा बटन प्रपत्र प्रस्तुत करने के लिए जब कोई उपयोगकर्ता प्रेस दर्ज प्रयोग किया जाता है मिलता है। इस तरह, जब आप एंटर द विज़ार्ड दबाएंगे, तो अगले पृष्ठ पर नहीं जाएगा, पिछले नहीं। क्या आपको ऐसा करने के लिए tabindex का उपयोग करना है?

उत्तर

131

मुझे उम्मीद है कि इससे मदद मिलती है। मैं सिर्फ दाईं ओर दिए गए बटनों में float की चाल कर रहा हूं।

इस तरह पिछला बटन अगला बटन के लिए छोड़ दिया है, लेकिन इसके बाद एचटीएमएल कोड में पहले आता है:

.f { 
 
    float: right; 
 
} 
 
.clr { 
 
    clear: both; 
 
}
<form action="action" method="get"> 
 
    <input type="text" name="abc"> 
 
    <div id="buttons"> 
 
    <input type="submit" class="f" name="next" value="Next"> 
 
    <input type="submit" class="f" name="prev" value="Prev"> 
 
    <div class="clr"></div><!-- This div prevents later elements from floating with the buttons. Keeps them 'inside' div#buttons --> 
 
    </div> 
 
</form>

संपादित करें: अन्य सुझावों से अधिक लाभ: कोई जावास्क्रिप्ट, सुलभ, दोनों बटन type="submit"

+20

कृपया टैब ऑर्डर को बदले बिना ऐसा न करें, ताकि टैब बटन पर क्लिक करने से स्क्रीन पर दिखाई देने वाले बटन के माध्यम से चक्र हो जाएगा। – Steve

53

इस तरह से अपनी प्रस्तुत बटन एक ही नाम दें:

<input type="submit" name="submitButton" value="Previous Page" /> 
<input type="submit" name="submitButton" value="Next Page" /> 

उपयोगकर्ता प्रेस दर्ज करें और अनुरोध सर्वर से हो जाता है, आप मूल्य submitButton अपने सर्वर-साइड कोड पर के लिए जो एक होता है जाँच कर सकते हैं फॉर्म name/value जोड़े का संग्रह। क्लासिक एएसपी में उदाहरण के लिए:

If Request.Form("submitButton") = "Previous Page" Then 
    ' Code for Previous Page 
ElseIf Request.Form("submitButton") = "Next Page" Then 
    ' Code for Next Page 
End If 

संदर्भ:

<input type="button" name="prev" value="Previous Page" /> 

अब अगला बटन होगा: Using multiple submit buttons on a single form

+25

यह वही है उपयोगकर्ता के लिए नहीं कहा गया है। उपयोगकर्ता यह जानना चाहता था कि एंटर दबाए जाने पर फॉर्म में कौन से सबमिट बटन को सक्रिय किया जाता है यानी सक्रिय किया जाता है। जो डिफ़ॉल्ट बटन है। – kosoant

+20

एक I18n एप्लिकेशन में काम नहीं करता है जहां आप बटन के लेबल को भी नहीं जानते हैं। – Chris

60

यह आप इस तरह एक बटन में पिछले बटन प्रकार बदलने के लिए के लिए संभव है डिफ़ॉल्ट हो, साथ ही आप default विशेषता भी जोड़ सकते हैं ताकि आपका ब्राउज़र इसे इस तरह हाइलाइट करेगा:

<input type="submit" name="next" value="Next Page" default /> 

उम्मीद है कि मदद करता है।

+37

** आप किस 'डिफ़ॉल्ट' विशेषता के बारे में बात कर रहे हैं? ** कोई "डिफ़ॉल्ट" विशेषता नहीं है, जो मान्य होगी: http: //www.w3।संगठन/एचटीएमएल/wg/ड्राफ्ट/एचटीएमएल/मास्टर/एकल-पृष्ठ.html # इनपुट-तत्व (एचटीएमएल 5 में नहीं, एचटीएमएल 4.01 संक्रमणकालीन/सख्त, एक्सएचटीएमएल 1.0 सख्त)। और मुझे नहीं लगता कि 'सबमिट' से 'बटन' तक इनपुट प्रकार क्यों बदलना बेहतर होगा। आप बिना किसी समस्या के एक फॉर्म में एकाधिक सबमिट प्रकार इनपुट तत्व प्राप्त कर सकते हैं। मैं वास्तव में समझ में नहीं आता कि यह जवाब इतना ऊंचा क्यों है। – Sk8erPeter

+3

"बटन" प्रकार का इनपुट होने से फॉर्म एक्शन निष्पादित नहीं होता है। आपके पास एक ऑनक्लिक या कुछ हो सकता है, इस प्रकार "डिफ़ॉल्ट" फॉर्म एक्शन (जिसे "सबमिट" -टाइप बटन दबाकर निष्पादित किया जाता है) से दूसरे फ़ंक्शन को निष्पादित किया जा सकता है। यही वह था जिसे मैं ढूंढ रहा था और इसलिए मैंने इसे ऊपर उठाया। "डिफ़ॉल्ट" विशेषता के लिए बात नहीं कर सकता, मेरी समस्या का हिस्सा नहीं था;) हालांकि, आपकी स्पष्टीकरण के लिए धन्यवाद। – Jonas

+2

@ Sk8erPeter, @ जोनास .... हम्म .. मुझे संदेह है कि यह 'डिफ़ॉल्ट' विशेषता वैश्विक विशेषता है; गणना की गई विशेषता .. जो गणना राज्यों से संबंधित है: http://www.w3.org/html/wg/drafts/html/master/single-page.html#keywords-and-enumerated-attributes। उस बिंदु के अलावा .. इस उत्तर का बटन पहलू उत्तर नहीं है .. यह एक '** सशर्त सुझाव **' है या एक प्रश्न (** स्वयं प्रश्न **)। –

30

यदि तथ्य यह है कि डिफ़ॉल्ट रूप से पहला बटन उपयोग किया जाता है तो ब्राउज़र में लगातार होता है, तो उन्हें स्रोत कोड में सही तरीके से क्यों न रखें, फिर अपनी स्पष्ट स्थिति स्विच करने के लिए सीएसएस का उपयोग करें? उदाहरण के लिए float उन्हें दृष्टि से चारों ओर स्विच करने के लिए बाएं और दाएं।

15

मैं फॉर्म सबमिट करने के लिए जावास्क्रिप्ट का उपयोग करूंगा। फ़ंक्शन तत्व तत्व की ऑनकेपप्रेस ईवेंट द्वारा ट्रिगर किया जाएगा, और यह पता लगाएगा कि एंटर कुंजी का चयन किया गया था या नहीं। यदि ऐसा है, तो यह फॉर्म जमा करेगा।

यहां दो पृष्ठ हैं जो यह करने के तरीके पर तकनीक देते हैं: 1, 2। इन के आधार पर, यहाँ उपयोग का एक उदाहरण (here के आधार पर) है:

<SCRIPT TYPE="text/javascript"><!-- 
function submitenter(myfield,e) { 
    var keycode; 
    if (window.event) { 
    keycode = window.event.keyCode; 
    } else if (e) { 
    keycode = e.which; 
    } else { 
    return true; 
    } 

    if (keycode == 13) { 
    myfield.form.submit(); 
    return false; 
    } else { 
    return true; 
    } 
} 
//--></SCRIPT> 

<INPUT NAME="MyText" TYPE="Text" onKeyPress="return submitenter(this,event)" /> 
+2

जावास्क्रिप्ट का क्या होता है अक्षम है? –

+2

आपको जेएस को टिप्पणी करने के लिए का उपयोग नहीं करना चाहिए, ये टैग जावास्क्रिप्ट भाषा टोकन नहीं हैं – Marecky

+2

@Marecky वे जेएस को टिप्पणी नहीं कर रहे हैं।

17

केविन, यह शुद्ध HTML के साथ नहीं किया जा सकता है। आपको इस चाल के लिए जावास्क्रिप्ट पर भरोसा करना चाहिए।

हालांकि, यदि आप HTML पृष्ठ पर दो रूप डालते हैं तो आप यह कर सकते हैं।

फॉर्म 1 का पिछला बटन होगा।

फॉर्म 2 में कोई भी उपयोगकर्ता इनपुट + अगला बटन होगा।

जब उपयोगकर्ता दबाता है तो फॉर्म 2 में दर्ज करें, अगला सबमिट बटन आग लगेगा।

14

केविन बने हुए हैं,

यह सबसे ब्राउज़रों में जावास्क्रिप्ट या सीएसएस के बिना काम करता है:

<form> 
<p><input type="text" name="field1" /></p> 
<p><a href="previous.html"> 
<button type="button">Previous Page</button></a> 
<button type="submit">Next Page</button></p> 
</form> 

फ़ायरफ़ॉक्स, ओपेरा, सफारी, गूगल क्रोम सब काम।
हमेशा की तरह, आईई समस्या है।

इस संस्करण में काम करता है जब JavaScript चालू है:

<form> 
<p><input type="text" name="field1" /></p> 
<p><a href="previous.html"> 
<button type="button" onclick="window.location='previous.html'">Previous Page</button></a> 
<button type="submit">Next Page</button></p> 
</form> 

तो इस समाधान में दोष है:
पिछले पृष्ठ काम नहीं करता है अगर आप जावास्क्रिप्ट के साथ IE बंद का उपयोग करें।
आपको याद है, बैक बटन अभी भी काम करता है!

+0

जावास्क्रिप्ट के बिना आप "पिछले पृष्ठ" बटन को सक्रिय करने में सक्षम नहीं होंगे, क्योंकि टाइप = "बटन"! – riskop

17

यह सीएसएस के साथ काम कर सकते हैं

अगले अगले बटन के रूप में मार्कअप में उन्हें रखो पहले, उसके बाद पिछले बटन।

तब स्थान देने के लिए जिस तरह से प्रकट करने के लिए सीएसएस का उपयोग आप करना चाहते हैं सभी बटन प्रस्तुत एक ही

11

नाम रख - "पिछला" फर्क सिर्फ इतना अद्वितीय मूल्यों के साथ value विशेषता है। जब हम स्क्रिप्ट बनाते हैं, तो ये अनूठे मूल्य हमें यह जानने में मदद करेंगे कि सबमिट बटन कौन से दबाए गए थे।

और follwing कोडिंग लिखें:

btnID = "" 
if Request.Form("prev") = "Previous Page" then 
    btnID = "1" 
else if Request.Form("prev") = "Next Page" then 
    btnID = "2" 
end if 
+0

समस्या यह है कि एक टेक्स्ट फ़ील्ड में प्रवेश करने से पहले सबमिट बटन के साथ फ़ॉर्म सबमिट किया जाएगा, इरादे से नहीं (उदाहरण में दूसरा वाला)। फ़ॉर्म सबमिट करने के लिए सबमिट बटन का उपयोग करना आसान था, और यह सवाल नहीं था! – riskop

17

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

<html> 
<head> 
    <style> 
     div.defaultsubmitbutton { 
      display: none; 
     } 
    </style> 
</head> 
<body> 
    <form action="action" method="get"> 
     <div class="defaultsubmitbutton"> 
      <input type="submit" name="next" value="Next"> 
     </div> 
     <p><input type="text" name="filter"><input type="submit" value="Filter"></p> 
     <p>Filtered results</p> 
     <input type="radio" name="choice" value="1">Filtered result 1 
     <input type="radio" name="choice" value="2">Filtered result 2 
     <input type="radio" name="choice" value="3">Filtered result 3 
     <div>     
      <input type="submit" name="prev" value="Prev"> 
      <input type="submit" name="next" value="Next"> 
     </div> 
    </form> 
</body> 
</html> 
12

टैब क्रम सब यह यह पूरा करने के लेता होना चाहिए बदल रहा है। इसे सरल रखें।

एक और आसान विकल्प एचटीएमएल कोड में सबमिट बटन के बाद बैक बटन डालना होगा, लेकिन इसे बाईं ओर तैरना होगा ताकि सबमिट बटन से पहले पेज पर दिखाई दे।

10

यह क्या मैं बाहर की कोशिश की है है: 1. आप सुनिश्चित करें कि आप अपने बटन अलग-अलग नामों 2. राइट एक देना सुनिश्चित करने की आवश्यकता है, तो बयान है कि आवश्यक कार्रवाई करता है, तो या तो बटन क्लिक किया करेंगे।

<form> 
<input type="text" name="field1" /> <!-- put your cursor in this field and press Enter --> 

<input type="submit" name="prev" value="Previous Page" /> <!-- This is the button that will submit --> 
<input type="submit" name="next" value="Next Page" /> <!-- But this is the button that I WANT to submit --> 
</form> 

पीएचपी में,

if(isset($_POST['prev'])) 
{ 
header("Location: previous.html"); 
die(); 
} 

if(isset($_POST['next'])) 
{ 
header("Location: next.html"); 
die(); 

} 
+0

समस्या यह है कि एक टेक्स्ट फ़ील्ड में प्रवेश करने से पहले सबमिट बटन के साथ फॉर्म सबमिट किया जाएगा, इरादे से नहीं (उदाहरण में दूसरा वाला)। फ़ॉर्म सबमिट करने के लिए सबमिट बटन का उपयोग करना आसान था, और यह सवाल नहीं था! – riskop

12

आप एक पृष्ठ पर एकाधिक बटन सक्रिय है तो आप कुछ इस तरह कर सकते हैं:

मार्क पहला बटन आप चाहते हैं चलाता है पर कुंजी दबाने दर्ज फॉर्म पर डिफॉल्टबटन के रूप में। दूसरे बटन के लिए इसे कीबोर्ड पर बैकस्पेस बटन से संबद्ध करें। // बैकस्पेस eventcode 8.

<form action="action" method="get" defaultbutton="TriggerOnEnter"> 
    <input type="submit" id="PreviousButton" name="prev" value="Prev" 
     class="secondary_button" /> 
    <input type="submit" id='TriggerOnEnter' name="next" value="Next" 
     class="primary_button" /> 
</form> 

<script type="text/javascript"> 
    $(document).on("keydown", function(event) { 
     if (event.which.toString() == "8") { 
      var findActiveElementsClosestForm = $(document.activeElement) 
                .closest("form"); 

      if (findActiveElementsClosestForm && 
       findActiveElementsClosestForm.length) { 
       $("form#" + findActiveElementsClosestForm[0].id 
        + " .secondary_button").trigger("click"); 
      } 
     } 
    }); 

</script> 

आशा इस मदद करता है।

12

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

टैब ऑर्डर बदलना इसे पूरा करने के लिए किया जाना चाहिए। इसे सरल रखें।

10

से https://html.spec.whatwg.org/multipage/forms.html#implicit-submission

एक रूप तत्व के डिफ़ॉल्ट बटन पेड़ आदेश जिसका प्रपत्र स्वामी उस प्रपत्र तत्व है में पहली सबमिट बटन है।

उपयोगकर्ता एजेंट दे उपयोगकर्ता कोई फ़ॉर्म सबमिट का समर्थन करता है, तो परोक्ष (उदाहरण के लिए, कुछ मार कुंजी "enter" जबकि एक पाठ क्षेत्र परोक्ष केंद्रित है प्रपत्र सबमिट प्लेटफार्मों पर) ...

अगला इनपुट होने के बाद टाइप = "सबमिट करें" और टाइप = "बटन" टाइप करने के लिए पिछले इनपुट को वांछित डिफ़ॉल्ट व्यवहार देना चाहिए।

<form> 
    <input type="text" name="field1" /> <!-- put your cursor in this field and press Enter --> 

    <input type="button" name="prev" value="Previous Page" /> <!-- This is the button that will submit --> 
    <input type="submit" name="next" value="Next Page" /> <!-- But this is the button that I WANT to submit --> 
</form> 
7

जावास्क्रिप्ट (यहाँ jQuery) के साथ, आप पिछला बटन से पहले प्रपत्र सबमिट निष्क्रिय कर सकते हैं।

$('form').on('keypress', function(event) { 
    if (event.which == 13) { 
     $('input[name="prev"]').prop('type', 'button'); 
    } 
}); 
10

पहली बार मैं इस मैं एक onclick() के साथ आया था के खिलाफ आया/js हैक जब विकल्प पिछला/अगले कि मैं अभी भी अपनी सादगी के लिए पसंद नहीं कर रहे हैं। यह इस प्रकार है:

@model myApp.Models.myModel  

<script type="text/javascript"> 
    function doOperation(op) { 
     document.getElementById("OperationId").innerText = op; 
     // you could also use Ajax to reference the element. 
    } 
</script> 

<form> 
    <input type="text" id = "TextFieldId" name="TextField" value="" /> 
    <input type="hidden" id="OperationId" name="Operation" value="" /> 
    <input type="submit" name="write" value="Write" onclick='doOperation("Write")'/> 
    <input type="submit" name="read" value="Read" onclick='doOperation("Read")'/> 
</form> 

जब या तो सबमिट बटन पर क्लिक किया जाता है यह एक छिपी हुई फ़ील्ड में वांछित आपरेशन (जो एक स्ट्रिंग क्षेत्र मॉडल फार्म के साथ जुड़ा हुआ है में शामिल है) संग्रहीत करता है और नियंत्रक को प्रपत्र सबमिट , जो सभी निर्णय लेता है। नियंत्रक, आप बस लिखें:

// Do operation according to which submit button was clicked 
// based on the contents of the hidden Operation field. 
if (myModel.Operation == "Read") 
{ 
    // do read logic 
} 
else if (myModel.Operation == "Write") 
{ 
    // do write logic 
} 
else 
{ 
    // do error logic 
} 

इस ऊपर से थोड़ा सांख्यिक ऑपरेशन कोड का उपयोग कर स्ट्रिंग पार्स से बचने के लिए कस सकता है, लेकिन जब तक आप Enums के साथ खेलते हैं, कोड, कम पठनीय परिवर्तनीय, और आत्म है दस्तावेज और पार्सिंग तुच्छ है, वैसे भी।

8

मूल रूप से उसी चीज का जवाब खोजने का प्रयास करते समय मैं इस सवाल पर आया, केवल एएसपीनेट नियंत्रण के साथ, जब मुझे पता चला कि एएसपी बटन में नामक एक संपत्ति है जो आपको यह निर्धारित करने की अनुमति देती है कि कौन सा करता है भेजने।

<asp:Button runat="server" ID="SumbitButton" UseSubmitBehavior="False" Text="Submit" /> 

शायद ज़रुरत पड़े किसी asp.net बटन तरीका यह करने के लिए की तलाश में है।

0

इसे आजमाएं ..!

<form> 
    <input type="text" name="Name" /> <!-- Enter the value --> 

    <input type="button" name="prev" value="Previous Page" /> <!-- This is the button that will submit --> 
    <input type="submit" name="next" value="Next Page" /> <!-- But this is the button that I WANT to submit --> 
</form> 
0

मैं इस तरह से एक बहुत ही इसी तरह की समस्या का समाधान:

  1. अगर javascript सक्षम है (ज्यादातर मामलों में आजकल) तो सभी प्रस्तुत बटन होते हैं पृष्ठ लोड पर "अपमानित" बटन को javascript (jquery) के माध्यम से। "अवशोषित" पर ईवेंट पर क्लिक करें बटन टाइप किए गए बटन javascript के माध्यम से भी संभाले जाते हैं।

  2. यदि javascript सक्षम नहीं है तो फ़ॉर्म को एकाधिक सबमिट बटन वाले ब्राउज़र पर सेवा दी जाती है। इस मामले से टकराने के रूप में एक textfield पर दर्ज इरादा डिफ़ॉल्ट के बजाय पहले बटन के साथ फ़ॉर्म सबमिट करेंगे, लेकिन कम से कम फार्म अभी भी प्रयोग करने योग्य है: तुम दोनों पिछला और अगले बटन के साथ प्रस्तुत कर सकते हैं ।

काम कर उदाहरण:

<html> 
 
    <head> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
 
    </head> 
 
    <body> 
 
    <form action="http://httpbin.org/post" method="post"> 
 
    If javascript is disabled, then you CAN submit the form with button1, button2 or button3. 
 
    If you press enter on a text field, then the form is submitted with the first submit button. 
 

 
    If javascript is enabled, then the submit typed buttons without the 'defaultSubmitButton' 
 
    style are converted to button typed buttons. 
 

 
    If you press enter on a text field, then the form is submitted with the only submit button 
 
    (the one with class defaultSubmitButton) 
 
    If you click on any other button in the form, then the form is submitted with that button's 
 
    value. 
 
    <br /> 
 
    <input type="text" name="text1" ></input> 
 
    <button type="submit" name="action" value="button1" >button 1</button> 
 
    <br /> 
 
    <input type="text" name="text2" ></input> 
 
    <button type="submit" name="action" value="button2" >button 2</button> 
 
    <br /> 
 
    <input type="text" name="text3" ></input> 
 
    <button class="defaultSubmitButton" type="submit" name="action" value="button3" >default button</button> 
 
    </form> 
 
    <script> 
 
    $(document).ready(function(){ 
 

 
    /* change submit typed buttons without the 'defaultSubmitButton' style to button typed buttons */ 
 
    $('form button[type=submit]').not('.defaultSubmitButton').each(function(){ 
 
     $(this).attr('type', 'button'); 
 
    }); 
 

 
    /* clicking on button typed buttons results in: 
 
     1. setting the form's submit button's value to the clicked button's value, 
 
     2. clicking on the form's submit button */ 
 
    $('form button[type=button]').click(function(event){ 
 
     var form = event.target.closest('form'); 
 
     var submit = $("button[type='submit']",form).first(); 
 
     submit.val(event.target.value); 
 
     submit.click(); 
 
    }); 
 

 
    }); 
 
    </script> 
 
    </body> 
 
    </html>

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