ฉันมีแบบสำรวจบนเว็บไซต์และดูเหมือนว่ามีปัญหาบางอย่างกับผู้ใช้ที่กดปุ่ม Enter (ฉันไม่รู้ว่าทำไม) และส่งแบบสำรวจ (แบบฟอร์ม) โดยไม่ตั้งใจโดยไม่ต้องคลิกปุ่มส่ง มีวิธีป้องกันไหม
ฉันใช้ HTML, PHP 5.2.9 และ jQuery ในการสำรวจ
ฉันมีแบบสำรวจบนเว็บไซต์และดูเหมือนว่ามีปัญหาบางอย่างกับผู้ใช้ที่กดปุ่ม Enter (ฉันไม่รู้ว่าทำไม) และส่งแบบสำรวจ (แบบฟอร์ม) โดยไม่ตั้งใจโดยไม่ต้องคลิกปุ่มส่ง มีวิธีป้องกันไหม
ฉันใช้ HTML, PHP 5.2.9 และ jQuery ในการสำรวจ
คำตอบ:
คุณสามารถใช้วิธีการเช่น
$(document).ready(function() {
$(window).keydown(function(event){
if(event.keyCode == 13) {
event.preventDefault();
return false;
}
});
});
ในการอ่านความคิดเห็นในโพสต์ต้นฉบับเพื่อให้สามารถใช้งานได้มากขึ้นและอนุญาตให้ผู้คนกดEnterถ้าพวกเขาได้กรอกข้อมูลทั้งหมดในฟิลด์:
function validationFunction() {
$('input').each(function() {
...
}
if(good) {
return true;
}
return false;
}
$(document).ready(function() {
$(window).keydown(function(event){
if( (event.keyCode == 13) && (validationFunction() == false) ) {
event.preventDefault();
return false;
}
});
});
keydown
กับที่document
แทนที่จะwindow
ทำงานเพื่อให้มันทำงานได้
&& !$(document.activeElement).is('textarea')
เงื่อนไขหรืออื่นบรรทัดใหม่ภายใน textarea ถูกบล็อก (ใน IE อย่างน้อย)
หากคุณไม่มี<textarea>
ในแบบฟอร์มของคุณให้เพิ่มสิ่งต่อไปนี้ใน<form>
:
<form ... onkeydown="return event.key != 'Enter';">
หรือกับ jQuery:
$(document).on("keydown", "form", function(event) {
return event.key != "Enter";
});
key
นี้จะทำให้ทุกคนที่กดปุ่มภายในรูปแบบจะถูกตรวจสอบใน หากไม่เป็นEnter
เช่นนั้นก็จะกลับมาtrue
และสิ่งใดที่จะดำเนินต่อไปตามปกติ หากเป็นEnter
เช่นนั้นจะส่งคืนfalse
และสิ่งใดจะหยุดทันทีดังนั้นจะไม่ส่งแบบฟอร์ม
keydown
เหตุการณ์เป็นที่ต้องการมากกว่าkeyup
เป็นkeyup
สายเกินไปที่จะใช้แบบฟอร์มการส่งบล็อก ในอดีตนอกจากนี้ยังมีแต่จะเลิกเป็นเป็นkeypress
KeyboardEvent.keyCode
คุณควรใช้KeyboardEvent.key
แทนซึ่งส่งกลับชื่อของคีย์ที่ถูกกด เมื่อไหร่Enter
ตรวจสอบแล้วสิ่งนี้จะตรวจสอบ 13 (ป้อนปกติ) และ 108 (ป้อน numpad)
โปรดทราบว่า$(window)
ตามคำแนะนำในคำตอบอื่น ๆ แทนที่จะใช้$(document)
ไม่ได้ผลกับkeydown
/ keyup
ใน IE <= 8 ดังนั้นจึงไม่ใช่ตัวเลือกที่ดีหากคุณต้องการครอบคลุมผู้ใช้ที่ไม่ดีเหล่านั้นด้วย
หากคุณมี<textarea>
ในรูปแบบของคุณ (ซึ่งแน่นอนควรยอมรับปุ่ม Enter) แล้วเพิ่มตัวจัดการ keydown <textarea>
เพื่อองค์ประกอบเข้าทุกรายที่ไม่ได้เป็น
<input ... onkeydown="return event.key != 'Enter';">
<select ... onkeydown="return event.key != 'Enter';">
...
เพื่อลดความผิดพลาดที่เกิดขึ้นควรทำด้วย jQuery:
$(document).on("keydown", ":input:not(textarea)", function(event) {
return event.key != "Enter";
});
หากคุณมีฟังก์ชั่นจัดการเหตุการณ์อื่น ๆ ที่แนบมากับองค์ประกอบการป้อนข้อมูลเหล่านั้นซึ่งคุณต้องการที่จะเรียกใช้ในคีย์ Enter ด้วยเหตุผลบางอย่างแล้วป้องกันพฤติกรรมเริ่มต้นของเหตุการณ์แทนการกลับเท็จดังนั้นจึงสามารถเผยแพร่ไปยังตัวจัดการอื่นได้อย่างเหมาะสม
$(document).on("keydown", ":input:not(textarea)", function(event) {
if (event.key == "Enter") {
event.preventDefault();
}
});
หากคุณต้องการอนุญาตให้ใส่รหัสบนปุ่มส่ง<input|button type="submit">
คุณสามารถปรับแต่งตัวเลือกได้ดังด้านล่าง
$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) {
// ...
});
โปรดทราบว่าinput[type=text]
ตามคำแนะนำในคำตอบอื่น ๆ จะไม่ครอบคลุมการป้อนข้อมูลที่ไม่ใช่ข้อความ HTML5 ดังนั้นจึงไม่ใช่ตัวเลือกที่ดี
":input:not(textarea):not([type=submit]):not(button)"
หากคุณใช้<button>
แทน<input type=submit>
input
หรือไม่
ส่วน 4.10.22.2 การส่งข้อมูลจำเพาะ W3C HTML5 โดยปริยายระบุว่า:
form
องค์ประกอบของปุ่มเริ่มต้นเป็นครั้งแรกที่ปุ่มส่งในการสั่งซื้อต้นไม้ที่มีการใช้รูปแบบคือการที่form
องค์ประกอบหากตัวแทนผู้ใช้รองรับการอนุญาตให้ผู้ใช้ส่งแบบฟอร์มโดยปริยาย (ตัวอย่างเช่นในบางแพลตฟอร์มที่กดปุ่ม "Enter" ในขณะที่ฟิลด์ข้อความเน้นการส่งแบบฟอร์มโดยปริยาย) จากนั้นให้ทำแบบฟอร์มที่ปุ่มเริ่มต้นมีการเปิดใช้งานที่กำหนดลักษณะการทำงานต้องทำให้ตัวแทนผู้ใช้เรียกใช้ขั้นตอนการเปิดใช้งานการคลิกสังเคราะห์บนปุ่มเริ่มต้นนั้น
หมายเหตุ:ดังนั้นหากปุ่มเริ่มต้นถูกปิดใช้งานจะไม่ส่งแบบฟอร์มเมื่อมีการใช้กลไกการส่งโดยนัยดังกล่าว (ปุ่มไม่มีการเปิดใช้งานเมื่อปิดใช้งาน)
ดังนั้นวิธีที่เป็นไปตามมาตรฐานเพื่อปิดใช้งานการส่งแบบฟอร์มใด ๆ โดยนัยคือการวางปุ่มส่งที่ถูกปิดใช้งานเป็นปุ่มส่งแรกในแบบฟอร์ม:
<form action="...">
<!-- Prevent implicit submission of the form -->
<button type="submit" disabled style="display: none" aria-hidden="true"></button>
<!-- ... -->
<button type="submit">Submit</button>
</form>
หนึ่งคุณลักษณะที่ดีของวิธีนี้ก็คือการทำงานโดยไม่ต้องใช้ JavaScript ; เปิดใช้งาน JavaScript หรือไม่จำเป็นต้องใช้เว็บเบราว์เซอร์ที่สอดคล้องกับมาตรฐานเพื่อป้องกันการส่งแบบฟอร์มโดยนัย
<input type="submit" disabled style="display: none" aria-hidden="true" />
และคุณสามารถลดขนาดหน้าเว็บของคุณลงได้ด้วยตัวอักษรสองสามตัว :-P
ฉันต้องจับทั้งสามเหตุการณ์ที่เกี่ยวข้องกับการกดปุ่มเพื่อป้องกันไม่ให้ส่งแบบฟอร์ม:
var preventSubmit = function(event) {
if(event.keyCode == 13) {
console.log("caught ya!");
event.preventDefault();
//event.stopPropagation();
return false;
}
}
$("#search").keypress(preventSubmit);
$("#search").keydown(preventSubmit);
$("#search").keyup(preventSubmit);
คุณสามารถรวมสิ่งต่าง ๆ ข้างต้นทั้งหมดเข้าด้วยกันเป็นแบบกะทัดรัด:
$('#search').bind('keypress keydown keyup', function(e){
if(e.keyCode == 13) { e.preventDefault(); }
});
$("#search").bind('keypress keyup keydown',preventSubmit)
ดังนี้
<form>
แท็กคีย์ Enter จะส่งแบบฟอร์ม ... วิธีนี้ปิดการใช้งานคีย์ enter และแก้ไขปัญหาแม้ว่าขอบคุณ @Dave! แล้วฉันจะเปิดใช้งานปุ่ม Enter id
สำหรับเขตข้อมูลบางอย่างโดย
console.log
ฉันได้อัพเดตคำตอบแล้ว
keypress keyup keydown
คุณเรียกรหัสใด ๆ ในถ้าเงื่อนไขเป็นครั้งที่สอง
หากคุณใช้สคริปต์เพื่อส่งจริงคุณสามารถเพิ่มบรรทัด "return false" ให้กับ onsubmit handler ดังนี้:
<form onsubmit="return false;">
การโทรส่ง () บนแบบฟอร์มจาก JavaScript จะไม่ทำให้เกิดเหตุการณ์
ใช้:
$(document).on('keyup keypress', 'form input[type="text"]', function(e) {
if(e.keyCode == 13) {
e.preventDefault();
return false;
}
});
โซลูชันนี้ใช้ได้กับทุกรูปแบบในเว็บไซต์ (รวมถึงแบบฟอร์มที่แทรกด้วย Ajax) เพื่อป้องกันเฉพาะEnterในข้อความอินพุต วางไว้ในฟังก์ชันพร้อมเอกสารและลืมปัญหานี้ไปตลอดชีวิต
e.which
นั้นใช้ได้ e.keyCode
ไม่จำเป็นต้องเปลี่ยนไป ทั้งคืนค่า 13 สำหรับคีย์ Enter ดูstackoverflow.com/a/4471635/292060และstackoverflow.com/a/18184976/292060
แทนที่จะป้องกันผู้ใช้จากการกดEnterซึ่งอาจดูเหมือนผิดธรรมชาติคุณสามารถออกจากแบบฟอร์มตามที่เป็นอยู่และเพิ่มการตรวจสอบฝั่งไคลเอ็นต์เพิ่มเติม: เมื่อแบบสำรวจไม่เสร็จสิ้นผลลัพธ์จะไม่ถูกส่งไปยังเซิร์ฟเวอร์และผู้ใช้จะได้รับข้อความที่ดี สิ่งที่ต้องทำให้เสร็จเพื่อกรอกแบบฟอร์ม หากคุณใช้ jQuery ให้ลองใช้ปลั๊กอินการตรวจสอบความถูกต้อง:
http://docs.jquery.com/Plugins/Validation
สิ่งนี้จะต้องใช้งานมากกว่าการEnterกดปุ่ม แต่แน่นอนว่ามันจะมอบประสบการณ์การใช้งานที่สมบูรณ์ยิ่งขึ้น
วิธีแก้ปัญหา jQuery เล็กน้อยที่เรียบง่ายดี:
$("form").bind("keypress", function (e) {
if (e.keyCode == 13) {
return false;
}
});
var key = event.keyCode || event.which; if (key == 13) return false;
ฉันยังไม่สามารถแสดงความคิดเห็นได้ดังนั้นฉันจะโพสต์คำตอบใหม่
คำตอบที่ยอมรับคือ ok-ish แต่มันก็ไม่ได้หยุดส่งเมื่อป้อน numpad อย่างน้อยใน Chrome เวอร์ชันปัจจุบัน ฉันต้องเปลี่ยนเงื่อนไขของรหัสนี้แล้วก็ใช้งานได้
if(event.keyCode == 13 || event.keyCode == 169) {...}
มันเป็นทางออกของฉันที่จะไปให้ถึงเป้าหมายมันสะอาดและมีประสิทธิภาพ
$('form').submit(function () {
if ($(document.activeElement).attr('type') == 'submit')
return true;
else return false;
});
แนวทางที่แตกต่างอย่างสิ้นเชิง:
<button type="submit">
Enterstyle="display:none;
false
ซึ่งยกเลิกกระบวนการส่ง<button type=submit>
เพื่อส่งแบบฟอร์ม เพียงแค่กลับtrue
ไปที่การเรียงซ้อนการส่ง<textarea>
หรือตัวควบคุมแบบอื่น ๆ จะทำงานตามปกติ<input>
แบบฟอร์มจะเรียกสิ่งแรก<button type=submit>
ซึ่งจะกลับfalse
มาและจะไม่มีอะไรเกิดขึ้นดังนั้น:
<form action="...">
<!-- insert this next line immediately after the <form> opening tag -->
<button type=submit onclick="return false;" style="display:none;"></button>
<!-- everything else follows as normal -->
<!-- ... -->
<button type=submit>Submit</button>
</form>
<button onclick="this.disabled=true;this.form.submit();" type="submit"">submit</button>
ให้แบบฟอร์มการทำงานของ 'javascript: void (0);' ดูเหมือนว่าจะทำเคล็ดลับ
<form action="javascript:void(0);">
<input type="text" />
</form>
<script>
$(document).ready(function() {
$(window).keydown(function(event){
if(event.keyCode == 13) {
alert('Hello');
}
});
});
</script>
การไม่ใส่ปุ่มส่งสามารถทำได้ เพียงใส่สคริปต์ไปยังอินพุต (ปุ่ม = ประเภท) หรือเพิ่ม eventListener หากคุณต้องการให้ส่งข้อมูลในแบบฟอร์ม
ค่อนข้างใช้สิ่งนี้
<input type="button">
กว่าการใช้สิ่งนี้
<input type="submit">
ฉันต้องการป้องกันเฉพาะอินพุตที่ไม่ส่งดังนั้นฉันจึงใช้ตัวเลือกคลาสเพื่อให้คุณสมบัตินี้เป็น "ทั่วโลก" ไม่ว่าฉันต้องการที่ใด
<input id="txtEmail" name="txtEmail" class="idNoEnter" .... />
และรหัส jQuery นี้:
$('.idNoEnter').keydown(function (e) {
if (e.keyCode == 13) {
e.preventDefault();
}
});
อีกวิธีหนึ่งหากการกดคีย์ไม่เพียงพอ:
$('.idNoEnter').on('keypress keydown keyup', function (e) {
if (e.keyCode == 13) {
e.preventDefault();
}
});
หมายเหตุบางส่วน:
การแก้ไขคำตอบที่ดีต่าง ๆ ที่นี่Enterดูเหมือนว่ากุญแจจะใช้ได้keydown
กับทุกเบราว์เซอร์ สำหรับทางเลือกฉันอัปเดตbind()
เป็นon()
วิธี
ฉันเป็นแฟนตัวยงของผู้เลือกคลาสการชั่งน้ำหนักข้อดีและข้อเสียและการอภิปรายประสิทธิภาพ หลักการตั้งชื่อของฉันคือ 'idSomething' เพื่อระบุว่า jQuery ใช้เป็น id เพื่อแยกมันออกจาก CSS style
คุณสามารถสร้างวิธี JavaScript เพื่อตรวจสอบว่ามีการEnterกดปุ่มหรือไม่และเพื่อหยุดการส่ง
<script type="text/javascript">
function noenter() {
return !(window.event && window.event.keyCode == 13); }
</script>
เพียงโทรหาเราที่วิธีส่ง
ส่งการบล็อกเท่านั้น แต่ไม่ใช่ฟังก์ชั่นที่สำคัญอื่น ๆ ของคีย์ Enter เช่นการสร้างย่อหน้าใหม่ใน<textarea>
:
window.addEventListener('keydown', function(event) {
//set default value for variable that will hold the status of keypress
pressedEnter = false;
//if user pressed enter, set the variable to true
if (event.keyCode == 13)
pressedEnter = true;
//we want forms to disable submit for a tenth of a second only
setTimeout(function() {
pressedEnter = false;
}, 100)
})
//find all forms
var forms = document.getElementsByTagName('form')
//loop through forms
for (i = 0; i < forms.length; i++) {
//listen to submit event
forms[i].addEventListener('submit', function(e) {
//if user just pressed enter, stop the submit event
if (pressedEnter == true) {
updateLog('Form prevented from submit.')
e.preventDefault();
return false;
}
updateLog('Form submitted.')
})
}
var log = document.getElementById('log')
updateLog = function(msg) {
log.innerText = msg
}
input,
textarea {
display: inline-block;
margin-bottom: 1em;
border: 1px solid #6f6f6f;
padding: 5px;
border-radius: 2px;
width: 90%;
font-size: 14px;
}
input[type=submit] {
background: lightblue;
color: #fff;
}
<form>
<p>Sample textarea (try enter key):</p>
<textarea rows="4">Hit enter, a new line will be added. But the form won't submit</textarea><br/>
<p>Sample textfield (try enter key):</p>
<input type="text" placeholder="" />
<br/>
<input type="submit" value="Save" />
<h3 id="log"></h3>
</form>
function(e)
function(event)
มิฉะนั้นมันใช้งานได้สำหรับฉัน ขอบคุณ.
on("keydown", function(event) { enterPressed = true; }
และจากนั้นในเหตุการณ์ส่งให้ทำ on("submit", function(e) { if (pressedEnter == true) { pressedEnter = false; e.preventDefault(); return false;}
สิ่งนี้จะช่วยให้มั่นใจได้ว่ามันจะทำงานไม่ว่าจะล่าช้าหรือไม่
นี่เป็นวิธีที่สมบูรณ์แบบคุณจะไม่ถูกเปลี่ยนเส้นทางจากหน้าเว็บของคุณ
$('form input').keydown(function (e) {
if (e.keyCode == 13) {
e.preventDefault();
return false;
}
});
ฉันมีปัญหาที่คล้ายกันซึ่งฉันมีตารางที่มี "ajax textfields" (Yii CGridView) และเพียงปุ่มส่งเพียงปุ่มเดียว ทุกครั้งที่ฉันค้นหาข้อความและกดปุ่มป้อนแบบฟอร์มที่ส่งมา ฉันต้องทำบางสิ่งด้วยปุ่มเพราะมันเป็นปุ่มทั่วไปเพียงอย่างเดียวระหว่างมุมมอง (รูปแบบ MVC) สิ่งที่ฉันต้องทำคือถอดtype="submit"
และใส่onclick="document.forms[0].submit()
ฉันคิดว่ามันครอบคลุมดีกับคำตอบทั้งหมด แต่ถ้าคุณใช้ปุ่มที่มีรหัสการตรวจสอบ JavaScript คุณสามารถตั้งค่า onkeypress ของแบบฟอร์มสำหรับ Enter เพื่อโทรส่งของคุณตามที่คาดไว้:
<form method="POST" action="..." onkeypress="if(event.keyCode == 13) mySubmitFunction(this); return false;">
onkeypress JS อาจเป็นสิ่งที่คุณต้องทำ ไม่จำเป็นต้องมีการเปลี่ยนแปลงระดับโลกที่ใหญ่ขึ้น นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งหากคุณไม่ได้เป็นคนหนึ่งที่เข้ารหัสแอปพลิเคชันตั้งแต่เริ่มต้นและคุณได้รับการแก้ไขเว็บไซต์ของบุคคลอื่นโดยไม่ฉีกมันออกจากกันและทำการทดสอบอีกครั้ง
มีคำตอบที่ดีมากมายที่นี่แล้วฉันแค่อยากมีส่วนร่วมในมุมมองของ UX การควบคุมคีย์บอร์ดในรูปแบบมีความสำคัญมาก
Enter
คำถามคือวิธีการปิดการใช้งานจากการส่งเมื่อกดแป้น ไม่ใช่วิธีเพิกเฉยEnter
ในแอปพลิเคชันทั้งหมด ดังนั้นให้พิจารณาการติดตั้ง handler เข้ากับองค์ประกอบของฟอร์มไม่ใช่หน้าต่าง
การปิดใช้งานEnter
สำหรับการส่งแบบฟอร์มยังควรอนุญาตสิ่งต่อไปนี้:
Enter
เมื่อมีการมุ่งเน้นปุ่มส่งEnter
การมีปฏิสัมพันธ์กับที่ไม่ได้ส่งผ่านทางปุ่มนี่เป็นเพียงสำเร็จรูป แต่เป็นไปตามเงื่อนไขทั้งสาม
$('form').on('keypress', function(e) {
// Register keypress on buttons.
$attr = $(e.target).attr('type);
if ($attr === 'button' || $attr === 'submit') {
return true;
}
// Ignore keypress if all fields are not populated.
if (e.which === 13 && !fieldsArePopulated(this)) {
return false;
}
});
บางสิ่งที่ฉันไม่ได้เห็นคำตอบที่นี่: เมื่อคุณแท็บองค์ประกอบบนหน้าการกดEnterเมื่อคุณไปที่ปุ่มส่งจะทำให้ตัวจัดการ onsubmit บนฟอร์ม แต่จะบันทึกเหตุการณ์เป็น MouseEvent นี่เป็นคำตอบสั้น ๆ ของฉันที่จะครอบคลุมฐานส่วนใหญ่:
นี่ไม่ใช่คำตอบที่เกี่ยวข้องกับ jQuery
<form onsubmit="return false;" method=post>
<input type="text" /><br />
<input type="button" onclick="this.form.submit()" value="submit via mouse or keyboard" />
<input type="button" onclick="submitMouseOnly(event)" value="submit via mouse only" />
</form>
window.submitMouseOnly=function(evt){
let allow=(evt instanceof MouseEvent) && evt.x>0 && evt.y>0 && evt.screenX > 0 && evt.screenY > 0;
if(allow)(evt.tagName=='FORM'?evt.target:evt.target.form).submit();
}
หากต้องการค้นหาตัวอย่างการทำงาน: https://jsfiddle.net/nemesarial/6rhogva2/
ในกรณีเฉพาะของฉันฉันต้องหยุดการป้อนแบบฟอร์มและจำลองการคลิกปุ่มส่ง นี่เป็นเพราะปุ่มส่งมีตัวจัดการการคลิกอยู่เพราะเราอยู่ในหน้าต่างโมดัล (สืบทอดรหัสเก่า) ในกรณีใด ๆ นี่คือคำสั่งผสมของฉันสำหรับกรณีนี้
$('input,select').keypress(function(event) {
// detect ENTER key
if (event.keyCode == 13) {
// simulate submit button click
$("#btn-submit").click();
// stop form from submitting via ENTER key press
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
});
กรณีการใช้งานนี้มีประโยชน์อย่างยิ่งสำหรับผู้ที่ทำงานกับ IE8
มันใช้งานได้สำหรับฉัน
jQuery.each($("#your_form_id").find('input'), function(){
$(this).bind('keypress keydown keyup', function(e){
if(e.keyCode == 13) { e.preventDefault(); }
});
});
ฉันต้องการเพิ่มรหัส CoffeeScript เล็กน้อย (ไม่ใช่การทดสอบภาคสนาม):
$ ->
$(window).bind 'keypress', (event) ->
if event.keyCode == 13
unless {'TEXTAREA', 'SELECT'}[event.originalEvent.srcElement.tagName]
event.preventDefault()
(ฉันหวังว่าคุณจะชอบกลอุบายที่ดีในข้อเว้นแต่)
ใช้Javascript (โดยไม่ตรวจสอบช่องใส่):
<script>
window.addEventListener('keydown', function(e) {
if (e.keyIdentifier == 'U+000A' || e.keyIdentifier == 'Enter' || e.keyCode == 13) {
e.preventDefault();
return false;
}
}, true);
</script>
หากมีคนต้องการใช้สิ่งนี้ในฟิลด์ที่ระบุเช่นข้อความประเภทอินพุต:
<script>
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>
มันใช้งานได้ดีในกรณีของฉัน
เข้าไปใน css ของคุณและเพิ่มเข้าไปในนั้นจากนั้นจะบล็อกการส่งสูตรของคุณโดยอัตโนมัติตราบใดที่คุณมีการป้อนข้อมูลหากคุณไม่ต้องการให้คุณสามารถลบมันหรือพิมพ์activate
และdeactivate
แทน
input:disabled {
background: gainsboro;
}
input[value]:disabled {
color: whitesmoke;
}
คุณสามารถใช้javascript:void(0)
เพื่อป้องกันการส่งแบบฟอร์ม
<form action="javascript:void(0)" method="post">
<label for="">Search</label>
<input type="text">
<button type="sybmit">Submit</button>
</form>
<form action="javascript:void(0)" method="post">
<label for="">Search</label>
<input type="text">
<button type="sybmit">Submit</button>
</form>
method="post"
ในแบบฟอร์มของคุณ เช่นฉันต้องการให้ส่งแบบฟอร์มโดยใช้ปุ่ม แต่ไม่เมื่อกด Enter ขณะที่มุ่งเน้นไปที่อินพุต
method="post"
ในรูปแบบและผลงานตรวจสอบอีกครั้ง
สิ่งนี้ได้ผลสำหรับฉันในเบราว์เซอร์ทั้งหมดหลังจากผิดหวังกับโซลูชันอื่น ๆ มากมาย ฟังก์ชั่นด้านนอก name_space นั้นอยู่ห่างจากการประกาศรอบ ๆ สิ่งที่ฉันแนะนำ
$(function() {window.name_space = new name_space();}); //jquery doc ready
function name_space() {
this.is_ie = (navigator.userAgent.indexOf("MSIE") !== -1);
this.stifle = function(event) {
event.cancelBubble;
event.returnValue = false;
if(this.is_ie === false) {
event.preventDefault();
}
return false;
}
this.on_enter = function(func) {
function catch_key(e) {
var enter = 13;
if(!e) {
var e = event;
}
keynum = GetKeyNum(e);
if (keynum === enter) {
if(func !== undefined && func !== null) {
func();
}
return name_space.stifle(e);
}
return true; // submit
}
if (window.Event) {
window.captureEvents(Event.KEYDOWN);
window.onkeydown = catch_key;
}
else {
document.onkeydown = catch_key;
}
if(name_space.is_ie === false) {
document.onkeypress = catch_key;
}
}
}
ตัวอย่างการใช้งาน:
$(function() {
name_space.on_enter(
function () {alert('hola!');}
);
});
ใช้:
// Validate your form using the jQuery onsubmit function... It'll really work...
$(document).ready(function(){
$(#form).submit(e){
e.preventDefault();
if(validation())
document.form1.submit();
});
});
function validation()
{
// Your form checking goes here.
}
<form id='form1' method='POST' action=''>
// Your form data
</form>