2008-12-19 16 views
20

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

<input type="text" name="something" value="blah"/> 
<input type=submit name="desired" value="Save Earth" style="display: none"/> 
... 
<input type=submit name="something_else" value="Destroy Earth" /> 
... 
<input id="foobar" type=submit name="desired" value="Save Earth" /> 

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

क्या जावास्क्रिप्ट का उपयोग करने का कोई तरीका है या अन्यथा यह चुनने के लिए कि सबमिट बटन का उपयोग तब किया जाएगा जब उपयोगकर्ता HTML फॉर्म पर टेक्स्ट इनपुट में एंटर कुंजी दबाएगा?

संपादित करें: स्पष्टीकरण के लिए, फ़ॉर्म को मूल रूप से "काम" करने के लिए जावास्क्रिप्ट की आवश्यकता नहीं हो सकती है। मुझे कोई परवाह नहीं है कि एंटर कुंजी सबमिशन वेबकिट ब्राउज़र पर जावास्क्रिप्ट के बिना अवांछित है, लेकिन मैं सबमिट बटन के ऑर्डर को हटा या बदल नहीं सकता।

यह मैंने कोशिश की है, यह वेबकिट ब्राउज़र में सबमिशन व्यवहार को नहीं बदलेगा।
फोकस() को निम्नलिखित कोड में पर क्लिक करने के लिए क्या काम किया गया है() पर क्लिक करें।

document.onkeypress = processKey; 

function processKey(e) 
{ 
    if (null == e) 
     e = window.event ; 
    if (e.keyCode == 13) { 
     document.getElementById("foobar").click(); // previously: focus() 
    } 
} 

संपादित करें: अंतिम समाधान: प्रत्येक ब्राउज़र के

काम करता है और जब आवश्यक कुंजी दर्ज करें को बीच में रोक:

HTML:

<input type="text" name="something" value="blah" 
    onkeydown="return processKey(event)" /> 
<input type=submit name="desired" value="Save Earth" style="display: none"/> 
... 
<input type=submit name="something_else" value="Destroy Earth" /> 
... 
<input id="foobar" type=submit name="desired" value="Save Earth" /> 

जावास्क्रिप्ट:

function processKey(e) 
{ 
    if (null == e) 
     e = window.event ; 
    if (e.keyCode == 13) { 
     document.getElementById("foobar").click(); 
     return false; 
    } 
} 
+0

नीचे मेरी उदाहरण की कोशिश करो। e.keycode – Tester101

उत्तर

4

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

इसका स्पष्ट शॉर्ट-पतन यह है कि उपयोगकर्ताओं को जावास्क्रिप्ट को सक्षम करने की आवश्यकता होगी। यदि यह कोई समस्या नहीं है तो यह आपके लिए एक विचार है।

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

यहाँ, मैं आप jQuery (समान आसानी से jQuery के बिना बनाया जा सकता है कार्यक्षमता) का उपयोग कर के लिए एक उदाहरण बनाने के लिए ... मुझे पता है कि अगर यह मदद करता है ... की कोशिश की

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <title>Untitled</title> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    <script type="text/javascript"><!-- 
    $(document).ready(function(){ 
     $("#f input").filter(":text").keydown(function(event) { 
      if (event.keyCode==13) { 
       $(this).nextAll().eq(0).click(); 
      } 
     }); 
    }); 
    //--></script> 
</head> 
<body> 
    <form name="f" id="f"> 
     <input type="text" id="t1" name="t1" /><input type="button" id="b1" name="b1" value="button-one" onclick="alert('clicked enter on textbox 1');" /><br /> 
     <input type="text" id="t2" name="t2" /><input type="button" id="b2" name="b2" value="button-two" onclick="alert('clicked enter on textbox 2');" /><br /> 
     <input type="text" id="t3" name="t3" /><input type="button" id="b3" name="b3" value="button-three" onclick="alert('clicked enter on textbox 3');" /><br /> 
    </form> 
</body> 
</html> 
+0

@ steveth45 के बजाय e.which का उपयोग करें मेरा उदाहरण देखें ... इनपुट बटन आसानी से बटन सबमिट करने के लिए बदला जा सकता है। – cLFlaVA

+0

आह! क्लिक() जवाब है! – postfuturist

+0

@ steveth45 - पूर्णता के लिए, सुनिश्चित करें कि आप सभी (अधिकतर) सामान्य ब्राउज़रों में ईवेंट को संभाल लें। कुछ घटना वस्तु का अलग-अलग व्यवहार करते हैं। http://www.quirksmode.org/dom/events/index.html – cLFlaVA

0

बस कुंजी प्रेस ईवेंट को नियंत्रित करें।बॉडी टैग


onkeypress=CheckKeyPress() 

में onKeyPress डाल तो दर्ज कुंजी


function CheckKeyPress(){ 
    var code; 
    if(!e) var e = window.event; 
    if(e.keyCode){ 
     code = e.keyCode; 
    }else if(e.which){ 
     code = e.which; 
    } 
    if(code == 13){ 
     //Do Something 
    } 
} 
+0

आप फ़ंक्शन के शीर्षलेख में "ई" डालना भूल गए हैं ... – some

+0

यह कोड केवल कुछ करता है यदि आप उस क्षेत्र में कोड डालते हैं जो // कुछ कहता है, और आप एंटर कुंजी – Tester101

0

keydown घटना रोकना मत संभाल, submit घटना अवरोधन।

तो:

form.onsubmit = function(e){ 
    // Do stuff. Change the form's action or method maybe. 
    return true; 
} 
+0

हम्म दबाते हैं, तो यह चाल यहां होगी इस फ़ंक्शन के अंदर से पता लगाना चाहिए कि क्या उपयोगकर्ता यहां टेक्स्ट इनपुट में प्रवेश करने या वास्तविक सबमिट बटन पर क्लिक करके पहुंचा था। क्या यह संभव है? – postfuturist

+0

@ steveth45: जहां तक ​​मुझे पता है, नहीं। जब ऑनसमेट कहा जाता है, तो यह/e.target/e.src फॉर्म तत्व के सभी बिंदुओं को हटाएं, बटन नहीं। – some

0

अलग रूपों का उपयोग कर के बारे में क्या? हो सकता है कि मुझे ऐसा कुछ याद आ रहा है जो इसे असंभव बनाता है: पी

+1

हां, विभिन्न सबमिट बटनों को अभी भी फॉर्म में मौजूद प्रत्येक इनपुट से पोस्ट किए गए मानों की आवश्यकता है, इसलिए फॉर्म को विभाजित करना काम नहीं करता है। – postfuturist

+0

और आप सर्वर-साइड पर अलग-अलग कार्रवाइयां नहीं कर सकते हैं, इस पर निर्भर करता है कि किस क्षेत्र में भरे हुए हैं? – finpingvin

+1

मैं कर सकता था लेकिन यह मेरे पृष्ठ के साथ कोई समझ नहीं लेगा और इस समस्या से पूरी तरह से असंबंधित है। – postfuturist

2

अदृश्य डिफ़ॉल्ट सबमिट कार्रवाई एक उचित दृष्टिकोण है और जावास्क्रिप्ट को समीकरण में खींच नहीं देता है। हालांकि 'डिस्प्ले: नो' वाले तत्व तत्व आम तौर पर विश्वसनीय नहीं होते हैं। मैं पृष्ठ के बाईं ओर स्थित पृष्ठ पर मौजूद लोगों के सामने एक पूरी तरह से सबमिट सबमिट बटन का उपयोग करता हूं। यह अभी भी बहुत बदसूरत है, लेकिन काम पूरा हो जाता है।

+0

यह एक अच्छा विचार है, इसके साथ नहीं गए, लेकिन एक उत्थान हो गया। – postfuturist

2

सीएसएस का उपयोग करने के बारे में कैसे? आप स्क्रीन के दृश्य क्षेत्र के बाहर पहला बटन, अपना डिफ़ॉल्ट बटन "स्थिति: पूर्ण; बाएं: -200 पीएक्स; शीर्ष: -200 पीएक्स;" के साथ सेट कर सकते हैं। जहां तक ​​मैं remeber, इसे किसी भी ब्राउज़र द्वारा अनदेखा नहीं किया जाएगा, क्योंकि यह अदृश्य नहीं है। यह सिर्फ ठीक काम करता है:

<form method="get"> 
<input type="text" name="something" value="blah"/> 
<input type=submit name="desired" value="Save Earth" 
     style="position: absolute; left: -200px; top: -200px;"/> 
... 
<input type=submit name="something_else" value="Destroy Earth" /> 
... 
<input id="foobar" type=submit name="desired" value="Save Earth" /> 
</form> 

और पृथ्वी सहेजा जाता है ...

+1

'और पृथ्वी बचाई जाती है ...' एलओएल! – Nirmal