ฉันจะทำให้ปุ่ม HTML ไม่โหลดหน้าซ้ำได้อย่างไร


117

ฉันมีปุ่ม ( <input type="submit">) เมื่อคลิกแล้วหน้าจะโหลดซ้ำ เนื่องจากฉันมีhide()ฟังก์ชั่นjQuery บางอย่างที่เรียกใช้ในการโหลดหน้าจึงทำให้องค์ประกอบเหล่านี้ถูกซ่อนอีกครั้ง ฉันจะทำให้ปุ่มไม่ต้องทำอะไรได้อย่างไรดังนั้นฉันจึงยังสามารถเพิ่มการทำงานบางอย่างที่เกิดขึ้นเมื่อคลิกปุ่ม แต่ไม่สามารถโหลดหน้าซ้ำได้

คำตอบ:


229

ไม่จำเป็นต้อง js หรือ jquery หากต้องการหยุดการโหลดหน้าซ้ำเพียงระบุประเภทปุ่มเป็น 'ปุ่ม' หากคุณไม่ระบุประเภทปุ่มเบราว์เซอร์จะตั้งค่าเป็น 'รีเซ็ต' หรือ 'ส่ง' แม่มดทำให้โหลดหน้าซ้ำ

 <button type='button'>submit</button> 

3
มันได้ผล! <input type='button' />มันเป็นทางเลือกที่ดี
Rick

5
สิ่งนี้ใช้ได้ดีและโดยเฉพาะอย่างยิ่งในกรณีของ Chrome (ซึ่งคำตอบที่ยอมรับไม่ได้)
hobailey

3
ทำงานบน Chrome บน Windows 10 เออ!
ssdscott

82

ใช้<button>องค์ประกอบหรือใช้<input type="button"/>ไฟล์.


110
องค์ประกอบ <button> โดยค่าเริ่มต้นจะทำให้เกิดการโหลดซ้ำใน chrome (อย่างน้อย)
AdamC

2
คุณยังสามารถใช้แบบฟอร์ม onsubmit เหตุการณ์และส่งคืนเท็จหากคุณยังไม่ต้องการกลับ
neu-rah

4
@Joe โชคร้ายจริงๆมันทำ: / ฉันต้องการให้ webapp ของฉันทำงานกับ IE8 และการโหลดซ้ำนั้นค่อนข้างน่ารำคาญ ...
Ms.Nobody

24
@pbeardshear จะทำอย่างไรหากวางไว้ในแบบฟอร์ม เมื่อ<button>ถูกวางไว้นอกฟอร์มการรีเฟรชจะไม่เกิดขึ้น!
Kevinvhengst

13
เพิ่มtype="button"ใน<button>องค์ประกอบใน chrome และไม่รีเฟรช
Johnny Metz

21

ใน HTML:

<form onsubmit="return false">
</form>

เพื่อหลีกเลี่ยงการรีเฟรชที่ "ปุ่ม" ทั้งหมดแม้ว่าจะมีการกำหนดแบบ onclick ก็ตาม


15

คุณสามารถเพิ่มตัวจัดการการคลิกบนปุ่มด้วย jQuery และส่งคืนเท็จ

$("input[type='submit']").click(function() { return false; });

หรือ

$("form").submit(function() { return false; });

6
สิ่งนี้ไม่ได้ผล การส่งคืนเท็จใน chrome อย่างน้อยในเวอร์ชันล่าสุดยังคงทำให้เกิดการรีเฟรช
user3690202

นี่เป็นคำตอบเดียวที่ใช้ได้ผลจริงสำหรับฉัน ฉันเพิ่งตอบกลับเท็จในฟังก์ชันของฉันและการรีเฟรชหยุดทั้งในซาฟารีและโครเมี่ยม
VessoVit

13

ใน HTML:

<input type="submit" onclick="return false">

ด้วย jQuery ตัวแปรที่คล้ายกันที่กล่าวถึงแล้ว


9

คุณสามารถใช้แบบฟอร์มที่มีปุ่มส่ง จากนั้นใช้ jQuery เพื่อป้องกันพฤติกรรมเริ่มต้นของฟอร์ม:

$(document).ready(function($) {
  $(document).on('submit', '#submit-form', function(event) {
    event.preventDefault();
  
    alert('page did not reload');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<form id='submit-form'>
  <button type='submit'>submit</button>
</form>


4

ตามที่ระบุไว้ในหนึ่งในความคิดเห็น (burried) ด้านบนสิ่งนี้สามารถแก้ไขได้โดยไม่วางแท็กปุ่มไว้ในแท็กแบบฟอร์ม เมื่อปุ่มอยู่นอกฟอร์มเพจจะไม่รีเฟรชตัวเอง


2

ฉันยังแสดงความคิดเห็นไม่ได้ฉันจึงโพสต์ข้อความนี้เพื่อเป็นคำตอบ วิธีที่ดีที่สุดในการหลีกเลี่ยงการโหลดซ้ำคือวิธีที่ @ user2868288 กล่าวว่า: โดยใช้onsubmitไฟล์formแท็ก

จากความเป็นไปได้อื่น ๆ ทั้งหมดที่กล่าวถึงที่นี่เป็นวิธีเดียวที่อนุญาตให้เรียกใช้การตรวจสอบข้อมูลอินพุตของเบราว์เซอร์ HTML5 ใหม่ ( <button>จะไม่ทำหรือตัวจัดการ jQuery / JS) และอนุญาตให้เพิ่มข้อมูลไดนามิก jQuery / AJAX ของคุณใน หน้า. ตัวอย่างเช่น:

<form id="frmData" onsubmit="return false">
 <input type="email" id="txtEmail" name="input_email" required="" placeholder="Enter a valid e-mail" spellcheck="false"/>
 <input type="tel" id="txtTel" name="input_tel" required="" placeholder="Enter your telephone number" spellcheck="false"/>
 <input type="submit" id="btnSubmit" value="Send Info"/>
</form>
<script type="text/javascript">
  $(document).ready(function(){
    $('#btnSubmit').click(function() {
        var tel = $("#txtTel").val();
        var email = $("#txtEmail").val();
        $.post("scripts/contact.php", {
            tel1: tel,
            email1: email
        })
        .done(function(data) {
            $('#lblEstatus').append(data); // Appends status
            if (data == "Received") {
                $("#btnSubmit").attr('disabled', 'disabled'); // Disable doubleclickers.
            }
        })
        .fail(function(xhr, textStatus, errorThrown) { 
            $('#lblEstatus').append("Error. Try later."); 
        });
     });
   }); 
</script>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.