जवाबों:
[ संशोधन 2012, कोई इनलाइन हैंडलर, संरक्षित textarea दर्ज हैंडलिंग]
function checkEnter(e){
e = e || event;
var txtArea = /textarea/i.test((e.target || e.srcElement).tagName);
return txtArea || (e.keyCode || e.which || e.charCode || 0) !== 13;
}
अब आप प्रपत्र पर एक कीपर हैंडलर को परिभाषित कर सकते हैं:
<form [...] onkeypress = "रिटर्न चेकइन्टर (ईवेंट)">
document.querySelector('form').onkeypress = checkEnter;
यहाँ एक jQuery हैंडलर है जिसका उपयोग सबमेट्स में प्रवेश रोकने के लिए किया जा सकता है, और बैकस्पेस कुंजी -> बैक को भी रोक सकता है। "कीसटॉप" ऑब्जेक्ट में कीकोड (चयनकर्ता: चयनकर्ता) जोड़े का उपयोग उन नोड्स से मिलान करने के लिए किया जाता है, जो उनकी डिफ़ॉल्ट कार्रवाई को आग नहीं देना चाहिए।
याद रखें कि वेब एक सुलभ स्थान होना चाहिए, और यह कीबोर्ड उपयोगकर्ताओं की उम्मीदों को तोड़ रहा है। उस स्थिति में, मैं जिस वेब एप्लिकेशन पर काम कर रहा हूं, वह वैसे भी बैक बटन को पसंद नहीं करता है, इसलिए इसके मुख्य शॉर्टकट को अक्षम करना ठीक है। "दर्ज करना चाहिए -> सबमिट" चर्चा महत्वपूर्ण है, लेकिन पूछे गए वास्तविक प्रश्न से संबंधित नहीं है।
यहाँ कोड है, आप तक पहुँच के बारे में सोचने के लिए और आप वास्तव में ऐसा क्यों करना चाहते हैं!
$(function(){
var keyStop = {
8: ":not(input:text, textarea, input:file, input:password)", // stop backspace = back
13: "input:text, input:password", // stop enter = submit
end: null
};
$(document).bind("keydown", function(event){
var selector = keyStop[event.which];
if(selector !== undefined && $(event.target).is(selector)) {
event.preventDefault(); //stop event
}
return true;
});
});
बस ऑनसाइट हैंडलर से झूठी वापसी करें
<form onsubmit="return false;">
या यदि आप बीच में एक हैंडलर चाहते हैं
<script>
var submitHandler = function() {
// do stuff
return false;
}
</script>
<form onsubmit="return submitHandler()">
submit
बटन दबाकर प्रस्तुत किया जाए
<form>
जमा होने से रोकना बच्चे को स्नान के पानी के साथ बाहर फेंक रहा है।
//Turn off submit on "Enter" key
$("form").bind("keypress", function (e) {
if (e.keyCode == 13) {
$("#btnSearch").attr('value');
//add more buttons here
return false;
}
});
e.preventDefault()
के बजाय return false
एक ही छोर को प्राप्त होगा लेकिन घटना को मूल तत्वों में हैंडलर तक पहुंचने की अनुमति देगा। डिफ़ॉल्ट कार्रवाई (फॉर्म का प्रवेश) अभी भी रोका जाएगा
आपको इस फ़ंक्शन को कॉल करना होगा जो फॉर्म के डिफ़ॉल्ट सबमिट व्यवहार को रद्द कर देगा। आप इसे किसी भी इनपुट फ़ील्ड या ईवेंट में संलग्न कर सकते हैं।
function doNothing() {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if( keyCode == 13 ) {
if(!e) var e = window.event;
e.cancelBubble = true;
e.returnValue = false;
if (e.stopPropagation) {
e.stopPropagation();
e.preventDefault();
}
}
ENTER कुंजी केवल फ़ॉर्म के डिफ़ॉल्ट सबमिट बटन को सक्रिय करती है, जो पहले होगा
<input type="submit" />
ब्राउज़र प्रपत्र के भीतर पाता है।
इसलिए सबमिट बटन नहीं है, लेकिन कुछ ऐसा है
<input type="button" value="Submit" onclick="submitform()" />
संपादित करें : टिप्पणियों में चर्चा के जवाब में:
यदि आपके पास केवल एक पाठ फ़ील्ड है तो यह काम नहीं करता है - लेकिन यह हो सकता है कि उस मामले में वांछित व्यवहार हो।
दूसरा मुद्दा यह है कि यह फॉर्म जमा करने के लिए जावास्क्रिप्ट पर निर्भर करता है। यह एक पहुंच बिंदु से समस्या हो सकती है। इसे <input type='button'/>
जावास्क्रिप्ट के साथ लिखकर हल किया जा सकता है , और फिर <input type='submit' />
एक <noscript>
टैग के भीतर रखा जा सकता है । इस दृष्टिकोण का दोष यह है कि जावास्क्रिप्ट-अक्षम किए गए ब्राउज़रों के लिए आपके पास ENTER पर फॉर्म सबमिशन होगा। यह ओपी को तय करना है कि इस मामले में वांछित व्यवहार क्या है।
मुझे पता है कि जावास्क्रिप्ट को बिल्कुल भी आमंत्रित किए बिना ऐसा करने का कोई तरीका नहीं है।
शुद्ध जावास्क्रिप्ट में संक्षिप्त उत्तर है:
<script type="text/javascript">
window.addEventListener('keydown', function(e) {
if (e.keyIdentifier == 'U+000A' || e.keyIdentifier == 'Enter' || e.keyCode == 13) {
if (e.target.nodeName == 'INPUT' && e.target.type == 'text') {
e.preventDefault();
return false;
}
}
}, true);
</script>
यह केवल इनपुट प्रकार = 'टेक्स्ट' के लिए "एन्टर" कीपर क्रिया को निष्क्रिय करता है। आगंतुक अभी भी पूरी वेबसाइट पर "एंटर" कुंजी का उपयोग कर सकते हैं।
यदि आप अन्य कार्यों के लिए "एन्टर" को भी निष्क्रिय करना चाहते हैं, तो आप कंसोल.लॉग (ई) जोड़ सकते हैं; अपने परीक्षण उद्देश्यों के लिए, और क्रोम में F12 को हिट करें, पृष्ठ पर "कंसोल" टैब और "बैकस्पेस" पर जाएं और इसे देखने के लिए अंदर देखें कि क्या मान लौटाए गए हैं, फिर आप उन सभी मापदंडों को लक्षित कर सकते हैं ताकि कोड को और बढ़ाया जा सके। "e.target.nodeName" , "e.target.type" और कई और अधिक के लिए अपनी आवश्यकताओं के अनुरूप ...
e.target.nodeName === 'INPUT' && e.target.type !== 'textarea'
। निर्दिष्ट कोड के साथ यह फॉर्म जमा करने की अनुमति देगा यदि कोई रेडियो या चेकबॉक्स केंद्रित है।
इस विषय पर, यहाँ या अन्य पदों पर मुझे मिले सभी उत्तरों में एक खामी है और वह यह है कि यह फार्म तत्व पर वास्तविक परिवर्तन ट्रिगर को रोकता है। इसलिए यदि आप इन समाधानों को चलाते हैं तो ऑनकॉन्ग्र घटना भी ट्रिगर नहीं होती है। इस समस्या को दूर करने के लिए मैंने इन कोडों को संशोधित किया और अपने लिए निम्न कोड विकसित किया। मुझे उम्मीद है कि यह दूसरों के लिए उपयोगी हो जाएगा। मैंने अपने फॉर्म "stop_auto_submit" को एक वर्ग दिया और निम्नलिखित जावास्क्रिप्ट जोड़ा:
$(document).ready(function()
{
$('form.prevent_auto_submit input,form.prevent_auto_submit select').keypress(function(event)
{
if (event.keyCode == 13)
{
event.preventDefault();
$(this).trigger("change");
}
});
});
मैंने हमेशा अतीत में ऊपर की तरह एक कीपर हैंडलर के साथ किया है, लेकिन आज एक सरल समाधान पर हिट हुआ। प्रवेश कुंजी फॉर्म पर पहले गैर-अक्षम सबमिट बटन को ट्रिगर करती है, इसलिए वास्तव में यह आवश्यक है कि उस बटन को सबमिट करने के लिए उस बटन को इंटरसेप्ट करना है:
<form>
<div style="display: none;">
<input type="submit" name="prevent-enter-submit" onclick="return false;">
</div>
<!-- rest of your form markup -->
</form>
बस। ब्राउज़र / फ़ील्ड / इत्यादि के द्वारा कीपेस को हमेशा की तरह संभाला जाएगा। यदि एंटर-सबमिट लॉजिक ट्रिगर हो जाता है, तो ब्राउज़र उस छिपे हुए सबमिट बटन को खोज लेगा और उसे ट्रिगर कर देगा। और जावास्क्रिप्ट हैंडलर तब सबमिशन को रोकेगा।
hidden
इनपुट पर सिर्फ attr डाल कम होगा। अच्छा हैक :)
मैंने IE8,9,10, ओपेरा 9+, फ़ायरफ़ॉक्स 23, सफारी (पीसी) और सफारी (मैक) के लिए इस क्रॉस ब्राउज़र को बनाने में कुछ समय बिताया है
JSFiddle उदाहरण: http://jsfiddle.net/greatbigmassive/ZyeHe/
आधार कोड - इस फ़ंक्शन को अपने फॉर्म से जुड़े "ऑनकीप्रेस" के माध्यम से कॉल करें और इसमें "window.event" पास करें।
function stopEnterSubmitting(e) {
if (e.keyCode == 13) {
var src = e.srcElement || e.target;
if (src.tagName.toLowerCase() != "textarea") {
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
}
}
}
stopSubmitOnEnter (e) {
var eve = e || window.event;
var keycode = eve.keyCode || eve.which || eve.charCode;
if (keycode == 13) {
eve.cancelBubble = true;
eve.returnValue = false;
if (eve.stopPropagation) {
eve.stopPropagation();
eve.preventDefault();
}
return false;
}
}
फिर अपने फॉर्म पर:
<form id="foo" onkeypress="stopSubmitOnEnter(e);">
हालाँकि, यह बेहतर होगा कि आप अप्रचलित जावास्क्रिप्ट का उपयोग न करें।
charCode
। मैं भी इफ़ return false
-ब्लॉक के अंदर चला गया । अच्छी पकड़।
मेरे मामले में, इस jQuery जावास्क्रिप्ट ने समस्या को हल किया
jQuery(function() {
jQuery("form.myform").submit(function(event) {
event.preventDefault();
return false;
});
}
<input>
फॉर्म के भीतर सभी फ़ील्ड के लिए प्रवेश कुंजी कैसे सक्षम कर सकते हैं ?
फ़ॉर्म सबमिट करने के लिए "ENTER" रोकना आपके कुछ उपयोगकर्ताओं को असुविधा कर सकता है। इसलिए बेहतर होगा कि आप नीचे दी गई प्रक्रिया का पालन करें:
अपने फॉर्म टैग में 'onSubmit' घटना लिखें:
<form name="formname" id="formId" onSubmit="return testSubmit()" ...>
....
....
....
</form>
जावास्क्रिप्ट फ़ंक्शन इस प्रकार लिखें:
function testSubmit(){
if(jQuery("#formId").valid())
{
return true;
}
return false;
}
(OR)
क्या कभी कारण है, यदि आप Enter कुंजी दबाने पर फ़ॉर्म सबमिट करने से रोकना चाहते हैं, तो आप निम्न फ़ंक्शन को जावास्क्रिप्ट में लिख सकते हैं:
$(document).ready(function() {
$(window).keydown(function(event){
if(event.keyCode == 13) {
event.preventDefault();
return false;
}
});
});
धन्यवाद।
इस टैग को अपने फॉर्म में जोड़ें - onsubmit="return false;"
फिर आप केवल कुछ जावास्क्रिप्ट फ़ंक्शन के साथ अपना फॉर्म जमा कर सकते हैं।
या enterमें दबाते समय फ़ॉर्म सबमिट को रोकने के लिएtextarea
input
क्षेत्र, क्या तत्व के प्रकार घटना भेजा लगाने के लिए घटना प्रस्तुत की जाँच करें।
<button type="submit" form="my-form">Submit</button>
<form id="my-form">
...
</form>
$(document).on('submit', 'form', function(e) {
if (e.delegateTarget.activeElement.type!=="submit") {
e.preventDefault();
}
});
एक बेहतर समाधान यह है कि अगर आपके पास सबमिट बटन नहीं है और आप एक सामान्य बटन के साथ घटना को फायर करते हैं। यह बेहतर है क्योंकि पहले परीक्षा 2 में जमा घटनाओं को निकाल दिया जाता है, लेकिन दूसरे उदाहरण में केवल 1 सबमिट घटना को निकाल दिया जाता है।
<button type="button" onclick="$('#my-form').submit();">Submit</button>
<form id="my-form">
...
</form>
$(document).on('submit', 'form', function(e) {
if (e.delegateTarget.activeElement.localName!=="button") {
e.preventDefault();
}
});
आपको यह अधिक सरल और उपयोगी लगेगा: डी
$(document).on('submit', 'form', function(e){
/* on form submit find the trigger */
if( $(e.delegateTarget.activeElement).not('input, textarea').length == 0 ){
/* if the trigger is not between selectors list, return super false */
e.preventDefault();
return false;
}
});
कृपया इस लेख की जाँच करें कि वेब फ़ॉर्म जमा करने के लिए ENTER कुंजी को कैसे रोका जाए?
$(“.pc_prevent_submit”).ready(function() {
$(window).keydown(function(event) {
if (event.keyCode == 13) {
event.preventDefault();
return false;
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class=”pc_prevent_submit” action=”” method=”post”>
<input type=”text” name=”username”>
<input type=”password” name=”userpassword”>
<input type=”submit” value=”submit”>
</form>
आप जावास्क्रिप्ट में एक फार्म पर कीपैड को फंसा सकते हैं और यहां तक कि बुदबुदाहट को रोक सकते हैं, मुझे लगता है। एक वेबपेज पर दर्ज करें मूल रूप से सिर्फ उस फॉर्म को जमा करता है जिसे वर्तमान में चयनित नियंत्रण में रखा गया है।
यह लिंक एक समाधान प्रदान करता है जो मेरे लिए Chrome, FF और IE9 प्लस में IE7 और 8 के लिए एमुलेटर का काम करता है जो IE9 के डेवलपर टूल (F12) के साथ आता है।
<script type="text/javascript"> function stopRKey(evt) { var evt = (evt) ? evt : ((event) ? event : null); var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); if ((evt.keyCode == 13) && (node.type=="text")) {return false;} } document.onkeypress = stopRKey; </script>
एक अन्य तरीका यह है कि सबमिट इनपुट बटन को केवल फॉर्म में जमा करना है, जब इसे सबमिट किया जाना है और फॉर्म भरने के दौरान इसे साधारण डिव से बदलना है।
बस इस विशेषता को अपने FORM टैग में जोड़ें:
onsubmit="return gbCanSubmit;"
फिर, अपने SCRIPT टैग में, इसे जोड़ें:
var gbCanSubmit = false;
फिर, जब आप एक बटन बनाते हैं या किसी अन्य कारण से (जैसे किसी फ़ंक्शन में) आप अंततः सबमिट की अनुमति देते हैं, तो बस ग्लोबल बूलियन को फ्लिप करें और इस उदाहरण के समान .submit () कॉल करें:
function submitClick(){
// error handler code goes here and return false if bad data
// okay, proceed...
gbCanSubmit = true;
$('#myform').submit(); // jQuery example
}
मैं स्वयं इस पर आया हूं क्योंकि मेरे पास विभिन्न 'नाम' मानों के साथ कई सबमिट बटन हैं, ताकि जब वे सबमिट करें तो वे एक ही phx फ़ाइल पर अलग-अलग काम करें। उन मानों को सबमिट नहीं किए enter
जाने के कारण / return
बटन इसे तोड़ देता है। तो मैं सोच रहा था, क्या enter
/ return
बटन फॉर्म में पहला सबमिट बटन सक्रिय करता है? इस तरह से आपके पास एक 'वेनिला' सबमिट बटन हो सकता है, जो या तो छिपा हुआ है या उसमें 'नाम' का मान है, जो क्रियान्वित करने वाली php फ़ाइल को उस फॉर्म के साथ पृष्ठ पर वापस लौटाता है। या फिर एक डिफ़ॉल्ट (छिपा हुआ) 'नाम' मान जो कि कीप सक्रिय करता है, और सबमिट बटन अपने स्वयं के 'नाम' मानों के साथ अधिलेखित हो जाता है। सिर्फ एक विचार।
कैसा रहेगा:
<script>
function isok(e) {
var name = e.explicitOriginalTarget.name;
if (name == "button") {
return true
}
return false;
}
</script>
<form onsubmit="return isok(event);">
<input type="text" name="serial"/>
<input type="submit" name="button" value="Create Thing"/>
</form>
और बस अपने बटन को सही नाम दें और यह अभी भी सबमिट होगा, लेकिन टेक्स्ट फ़ील्ड यानी स्पष्ट ऑरिजिनलटार्ग जब आप एक में रिटर्न मारते हैं, तो सही नाम नहीं होगा।
इसने मेरे लिए काम किया।
onkeydown = "वापसी! (event.keyCode == 13)"
<form id="form1" runat="server" onkeydown="return !(event.keyCode==13)">
</form>
यहाँ है कि मैं यह कैसे करूँगा:
window.addEventListener('keydown', function(event)
{
if (event.key === "Enter")
{
if(event.target.type !== 'submit')
{
event.preventDefault();
return false;
}
}
}
जावास्क्रिप्ट बाहरी फ़ाइल में डाल दिया
(function ($) {
$(window).keydown(function (event) {
if (event.keyCode == 13) {
return false;
}
});
})(jQuery);
या शरीर के अंदर कहीं टैग
<script>
$(document).ready(function() {
$(window).keydown(function(event) {
alert(1);
if(event.keyCode == 13) {
return false;
}
});
});
</script>
मुझे एक ही समस्या थी (पाठ फ़ील्ड और अकुशल उपयोगकर्ताओं के टन के साथ प्रपत्र)।
मैंने इसे इस तरह हल किया:
function chkSubmit() {
if (window.confirm('Do you want to store the data?')) {
return true;
} else {
// some code to focus on a specific field
return false;
}
}
HTML कोड में इसका उपयोग करना:
<form
action="go.php"
method="post"
accept-charset="utf-8"
enctype="multipart/form-data"
onsubmit="return chkSubmit()"
>
इस तरह ENTER
मुख्य योजना के अनुसार काम करता है, लेकिन एक पुष्टिकरण (एक दूसरा ENTER
नल, आमतौर पर) की आवश्यकता होती है।
मैं पाठकों को एक स्क्रिप्ट के लिए खोज छोड़ता हूं, जहां वह उपयोगकर्ता को उस क्षेत्र में भेज रहा है, जहां उसने ENTER
फॉर्म पर रहने का फैसला किया था।