2009-06-24 17 views
23

में 'एंटर' कुंजी मारने वाले उपयोगकर्ता को संभालें मैं एक एएसपी.नेट एमवीसी वेब साइट पर काम कर रहा हूं जिसमें एकाधिक सबमिट बटन हैं। यानीएएसपी.नेट एमवीसी वेब साइट

<input type="submit" name="SubmitButton" value="Reset" /> 
    <input type="submit" name="SubmitButton" value="OK" /> 
    <input type="submit" name="SubmitButton" value="Back" /> 

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

मैंने चारों ओर गुगल किया और मुझे this post एएसपी.NET में पेज.फॉर्म.डिफॉल्ट बटन का उपयोग करने के बारे में मिला लेकिन यह एएसपी.नेट एमवीसी के साथ काम नहीं करता है।

मैं भी निम्नलिखित जावास्क्रिप्ट समाधान की कोशिश की, जबकि यह क्रोम में काम करता है लेकिन इस तरह के रूप में एक में हर नियंत्रण के माध्यम से जा के रूप में IE6

में काम नहीं करता
$('body').keypress(function(e) { 
     if (e.which === 13) { 
      $("input[value='OK']").trigger('click'); 
     } 
    }); 

मैं वास्तव में कुछ चरम समाधान के बारे में सोच सकते उपरोक्त फ़ंक्शन को उनके साथ संलग्न करें। हालांकि, मुझे नहीं लगता कि यह एक बहुत साफ समाधान है इसलिए मुझे आश्चर्य है कि किसी को भी बेहतर समाधान मिला है?

+2

कि वास्तव में एक क्लासिक बटन रीसेट माना जाता है, तो आप * दृढ़ता से विचार करें इसे हटाने * चाहिए: http://www.useit.com/alertbox/20000416.html –

उत्तर

32

सबसे पहले, यह गलत है:

<input type="submit" name="SubmitButton" value="Reset" /> 
<input type="submit" name="SubmitButton" value="OK" /> 
<input type="submit" name="SubmitButton" value="Back" /> 

सभी उनमें से तीन बटन प्रस्तुत कर रहे हैं। रीसेट प्रकार = "रीसेट" का इनपुट है। उस क्रमबद्ध हो जाओ। सबसे दूसरा, मैंने सफलतापूर्वक कुछ ऐसा कार्यान्वित किया है, और यह आईई 6 पर काम करता है। इस प्रयास करें:

function keypressHandler(e) 
    { 
     if(e.which == 13) { 
      e.preventDefault(); //stops default action: submitting form 
      $(this).blur(); 
      $('#SubmitButton').focus().click();//give your submit an ID 
     } 
    } 

    $('#myForm').keypress(keypressHandler); 

फोकस() हिस्सा बटन दबाया होना दिखाई देते हैं जब उपयोगकर्ता प्रेस दर्ज बनाता है। काफी निफ्टी

+0

@kuoson - बस एक विचार है, लेकिन हो सकता है कि आपका कोड वास्तव में काम कर रहा था और '===' ऑपरेटर आपके कीप्रेस हैंडलर में स्थिति को तोड़ रहा था। मैं वास्तव में इसके जवाब पोस्ट करने से पहले इसके बारे में सोच रहा था। – karim79

0

स्रोत में बटन ऑर्डर बदलें लेकिन दृष्टि से नहीं (यानी, बटन को स्वैप करने के लिए सीएसएस का उपयोग करें)?

4

आपके पास केवल एक सबमिट बटन होना चाहिए। रीसेट बटन type="reset" होना चाहिए और वापस बटन शायद type="button" इस तरह होना चाहिए:

<input type="reset" name="ResetButton" value="Reset" /> 
<input type="submit" name="SubmitButton" value="OK" /> 
<input type="button" name="BackButton" value="Back" /> 
फिर

, रीसेट करें और ठीक को जैसा करने वाले हैं काम करेंगे और आप केवल वापस बटन क्लिक करें को प्रबंधित करना होगा जावास्क्रिप्ट के साथ।

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

+0

मुझे एक सबमिट बटन भी रीसेट करने की आवश्यकता है क्योंकि मुझे कुछ सत्र डेटा भी साफ़ करने की आवश्यकता है, लेकिन धन्यवाद +1 – oscarkuo

9

इसका उपयोग करें।

$(function(){ 
    $('input').keydown(function(e){ 
     if (e.keyCode == 13) { 
      $("input[value='OK']").focus().click(); 
      return false; 
     } 
    }); 
}); 
+0

धन्यवाद। यह पोस्ट मेरे लिए काम किया। –

3

जब से तुम jQuery का उपयोग करें, यदि आप hotkeys plugin उपयोग करते हैं, आप एक ऐसे दृष्टिकोण कर सकते हैं:

$(document).bind('keydown', 'return', function (evt){ 
    $.next("input[value='OK']").trigger("click"); 
    return false; 
}); 
+0

'अगला' अब jquery के दायरे में नहीं है, लेकिन इसे हटा दें और यह काम करता है। – arame3333

3

HTML मानक निर्दिष्ट करने के लिए कि पहले सबमिट बटन एक अगर मान लिया हो जाएगा लगता है उपयोगकर्ता 'एंटर' कुंजी दबाएं।

नहीं, एंटर कुंजी का उपयोग परिभाषित नहीं किया गया है, यह एक प्रोपर्टी एक्सटेंशन है जिसे विभिन्न व्याख्याओं के तहत जोड़ा गया है। आपको अलग-अलग ब्राउज़रों में अलग-अलग व्यवहार मिलेंगे (और जब आप विकल्प के बाएं से दाएं/दाएं से बाएं ऑर्डरिंग के बारे में विभिन्न सांस्कृतिक या यूआई सम्मेलनों में मिश्रण करना शुरू करते हैं तो यह बहुत खतरनाक हो सकता है)।

यदि फॉर्म पर केवल 1 बटन है तो सभी मुख्यधारा के ब्राउज़र एक ही व्यवहार का पालन करते हैं - वे फॉर्म सबमिट करते हैं जैसे कि बटन दबाया गया था (बटन बटन = बटन वैल्यू फॉर्म डेटा के साथ शामिल है)। बेशक इसका मतलब यह नहीं है कि हैंडलर पर क्लिक करने वाले बटन आग लगने जा रहे हैं - यह व्यवहार ब्राउज़र विशिष्ट है।

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

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