biểu mẫu không có hành động và nơi enter không tải lại trang


94

Tôi đang tìm cách gọn gàng nhất để tạo một biểu mẫu HTML không có nút gửi. Điều đó tự nó đã đủ dễ dàng, nhưng tôi cũng cần ngăn biểu mẫu tự tải lại khi thực hiện xong những việc giống như gửi (ví dụ: nhấn Entervào trường văn bản).


Bạn có muốn nó không bao giờ phải nộp?
UpTheCreek,

Nếu bạn chỉ có một <form> với một <input> duy nhất là trường văn bản, nó không nên gửi khi bạn nhấn enter, phải không?
Zack The Human,

Tôi muốn nó tuân theo một số điều kiện khác (thực tế là nhấn một nút nhất định). Vấn đề là tôi đã không thể làm cho hành vi 'nhập khi đang ở trong trường văn bản' khi đăng / truy cập cùng một url để không xảy ra. Vì vậy, biểu mẫu được tạo cẩn thận của tôi, nơi bạn cần thực hiện X, Y và Z để gửi biểu mẫu có thể bị gửi nhầm bởi người dùng nhấn enter.
Matt Roberts

Câu trả lời:


44

Thêm trình xử lý gửi kèm vào biểu mẫu (thông qua js thuần túy hoặc jquery $ (). Submit (fn)) và trả về false trừ khi các điều kiện cụ thể của bạn được đáp ứng.

Trừ khi bạn không muốn gửi biểu mẫu - trong trường hợp đó, tại sao không bỏ thuộc tính 'action' trên phần tử biểu mẫu?


150
actionTheo tiêu chuẩn, biểu mẫu không có thuộc tính không phải là biểu mẫu - và thực sự sẽ gây ra tải lại trang trong một số trình duyệt .. Tôi thấy rằng biểu mẫu đó action="javascript:void(0);"hoạt động tốt.
Dutchie432

Câu trả lời của Dutchies hoạt động hoàn hảo. Firefox vừa làm mới trang.
IAmGroot

1
@ Dutchie432 nên biến điều này thành một câu trả lời thay vì một bình luận. Sau đó, nó sẽ đi đến đỉnh nơi nó thuộc về. Ngoài ra, có thể điều chỉnh KPrime câu trả lời của mình, kể từ khi bỏ qua hành động không làm việc cho tôi ...
nhà hiền triết

210

Bạn sẽ muốn đưa action="javascript:void(0);"vào biểu mẫu của mình để ngăn tải lại trang và duy trì tiêu chuẩn HTML.


4
Chỉ dành 2 ngày để cố gắng ngăn chặn hành động mặc định của nút gửi khi nhấn enter, bởi vì mặc dù hành động này đã diễn ra, nhưng cuối cùng trang vẫn phải tải lại (Firefox). Thêm khoảng trống javascript làm hành động trên biểu mẫu đã sửa nó. Cảm ơn vì điều đó.
Tony Payne,

cảm ơn cho câu trả lời bổ sung này. điều này vẫn hoạt động - nhưng đây có còn là giải pháp "tối tân" trong năm 2016 không?
low_rents

1
@low_rents Tôi vẫn sử dụng nó mọi lúc và chưa tìm ra giải pháp tốt hơn.
Dutchie432

1
Cảm ơn bạn vì giải pháp chính xác và tuyệt vời để giải quyết việc tải lại trang trong khi nhấn phím enter :) Giải pháp tốt nhất.
Imran Rafiq Rather

9

Chỉ cần thêm sự kiện này vào trường văn bản của bạn. Nó sẽ ngăn việc gửi khi nhấn Enter và bạn có thể tự do thêm nút gửi hoặc biểu mẫu gọi.submit () theo yêu cầu:

onKeyPress="if (event.which == 13) return false;"

Ví dụ:

<input id="txt" type="text" onKeyPress="if (event.which == 13) return false;"></input>

1
Cảm ơn vì điều đó. Tôi e rằng sự rõ ràng của câu trả lời của bạn đã làm rõ cho tôi tính đúng đắn của một câu trả lời trước đó, vì vậy bạn không nhận được câu trả lời được chấp nhận nhưng bạn nhận được sự biết ơn của tôi và một sự ủng hộ!
Matt Roberts

2
Cảm ơn bạn. Rất vui được giúp đỡ. Dù sao thì tôi cũng chưa bao giờ là một trong những ánh đèn sân khấu. ;)
GenericMeatUnit

5

Khi bạn nhấn enter trong một biểu mẫu, hành vi tự nhiên của biểu mẫu sẽ được gửi đi, để dừng hành vi không tự nhiên này, bạn phải ngăn nó không phục tùng (hành vi mặc định), bằng jquery:

$("#yourFormId").on("submit",function(event){event.preventDefault()})

4

một ý tưởng:

<form method="POST" action="javascript:void(0);" onSubmit="CheckPassword()">
    <input id="pwset" type="text" size="20" name='pwuser'><br><br>
    <button type="button" onclick="CheckPassword()">Next</button>
</form>

<script type="text/javascript">
    $("#pwset").focus();
    function CheckPassword()
    {
        inputtxt = $("#pwset").val();
        //and now your code
        $("#div1").load("next.php #div2");
        return false;
    }
</script>

1

Hai cách để giải quyết:

  1. giá trị hành động của biểu mẫu là "javascript: void (0);".
  2. thêm trình xử lý sự kiện nhấn phím cho biểu mẫu để ngăn chặn việc gửi.

Nghe sự kiện nhấn phím (ví dụ: nhập phím) có thể khiến bạn gặp rắc rối với textareas và có thể chọn tự động hoàn thành hoặc trình đơn thả xuống và thiết bị di động có thể là một nguồn rắc rối khác.
luckydonald

0

Phản hồi đầu tiên là giải pháp tốt nhất:

Thêm trình xử lý gửi kèm vào biểu mẫu (thông qua js thuần túy hoặc jquery $ (). Submit (fn)) và trả về false trừ khi các điều kiện cụ thể của bạn được đáp ứng.

Cụ thể hơn với jquery:

$('#your-form-id').submit(function(){return false;});

Trừ khi bạn không muốn gửi biểu mẫu - trong trường hợp đó, tại sao không bỏ thuộc tính 'action' trên phần tử biểu mẫu?

Viết tiện ích mở rộng Chrome là một ví dụ về việc bạn có thể có một biểu mẫu để người dùng nhập vào, nhưng bạn không muốn nó gửi. Nếu bạn sử dụng action = "javascript: void (0);", mã có thể sẽ hoạt động nhưng bạn sẽ gặp sự cố này khi bạn gặp lỗi khi chạy Javascript nội tuyến.

Nếu bạn bỏ qua hoàn toàn thao tác, biểu mẫu sẽ tải lại, điều này cũng không mong muốn trong một số trường hợp khi viết tiện ích mở rộng Chrome. Hoặc nếu bạn có một trang web với một số loại máy tính nhúng, nơi người dùng sẽ cung cấp một số thông tin đầu vào và nhấp vào "Tính toán" hoặc tương tự như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.