işlem içermeyen ve enter sayfasının yeniden yüklenmediği form


95

Gönder düğmesi olmayan bir HTML formu oluşturmanın en düzgün yolunu arıyorum. Bu kendi başına yeterince kolay, ancak gönderim benzeri şeyler yapıldığında (örneğin, Enterbir metin alanına vurmak ) formun kendini yeniden yüklemesini de durdurmam gerekiyor .


Asla teslim olmamasını mı istiyorsun?
UpTheCreek

Metin alanı olan tek bir <input> içeren bir <form> 'unuz varsa, enter tuşuna bastığınızda gönderilmemesi gerekir, değil mi?
Zack The Human

Başka bir koşulda teslim olmasını istiyorum (aslında belirli bir düğmeye basmak). Sorun şu ki, 'metin alanına girerken' aynı url'ye gönderme / alma davranışını alamıyorum. Bu yüzden, dikkatlice oluşturulmuş formum, göndermek için X, Y ve Z'yi yapmanız gereken yerde, enter tuşuna basan kullanıcı tarafından yanlışlıkla gönderilebilir.
Matt Roberts

Yanıtlar:


44

Forma bir onsubmit işleyicisi ekleyin (düz js veya jquery $ (). Submit (fn) aracılığıyla) ve özel koşullarınız karşılanmadığı sürece false değerini döndürün.

Formun gönderilmesini istemediğiniz sürece - bu durumda, neden form öğesindeki "eylem" özelliğini dışarıda bırakmıyorsunuz?


153
Bir olmadan bir form actionözniteliği standartlarına göre, bir formu değil - ve aslında bazı tarayıcılarda bir sayfayı yeniden neden olacaktır .. ben tespit ettim action="javascript:void(0);"eserler de.
Dutchie432

Hollandalılar cevap mükemmel çalışıyor. Firefox sadece sayfayı yeniliyordu.
IAmGroot

1
@ Dutchie432 bunu bir yorum yerine bir cevap haline getirmelidir. Sonra ait olduğu yerde zirveye çıkardı. Alternatif olarak, KPrime, eylemi atlamak benim için işe yaramadığı için cevabını değiştirebilirdi ...
sage

212

action="javascript:void(0);"Sayfanın yeniden yüklenmesini önlemek ve HTML standardını korumak için formunuza eklemek isteyeceksiniz .


4
Enter tuşuna basıldığında gönder düğmesinin varsayılan eylemini bastırmaya çalışmak için 2 gün harcadım, çünkü eylem gerçekleşmesine rağmen sayfanın yeniden yüklenmesi sona erdi (Firefox). Formdaki eylem olarak javascript geçersiz kılınması sorunu düzeltti. Bunun için teşekkürler.
Tony Payne

bu ek cevap için teşekkürler. bu hala işe yarıyor - ancak bu hala 2016'daki "son teknoloji" çözüm mü?
low_rents

1
@low_rents Hala her zaman kullanıyorum ve kişisel olarak daha iyi bir çözüm bulamadım.
Dutchie432

1
Enter tuşuna basarken sayfanın yeniden yüklenmesini çözmek için kesin ve harika bir çözüm için teşekkür ederiz :) En iyi çözüm.
Imran Rafiq

9

Bu etkinliği metin alanınıza eklemeniz yeterlidir. Enter tuşuna basıldığında gönderimi engelleyecektir ve gerektiği gibi bir gönder düğmesi veya arama formu eklemekte özgürsünüz.

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

Örneğin:

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

1
Bunun için teşekkür ederim. Korkarım, cevabınızın netliği, daha önceki bir cevabın doğruluğunu bana açıkça gösterdi, böylece kabul edilen cevabı alamazsınız, ancak minnettarlığımı ve bir olumlu oyu alıyorsunuz!
Matt Roberts

2
Teşekkür ederim. Yardımcı olduğuma sevindim. Zaten hiç ilgi odağı olmadım. ;)
GenericMeatUnit

5

Bir forma enter tuşuna bastığınızda, formun doğal davranışı gönderilmektir, doğal olmayan bu davranışı durdurmak için jquery ile gönderilmesini engellemelisiniz (varsayılan davranış):

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

4

bir fikir:

<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>

ve

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

1

Çözmenin iki yolu:

  1. formun işlem değeri "javascript: void (0);".
  2. göndermeyi önlemek için form için tuşa basma olay dinleyicisi ekleyin.

Tuşa basma olayını dinlemek (örneğin, anahtarı girmek) sizi e-postalarla başınızı belaya sokabilir textareave muhtemelen otomatik tamamlamayı veya açılır menüleri seçebilir ve mobil başka bir sorun kaynağı olabilir.
luckydonald

0

İlk cevap en iyi çözümdür:

Forma bir onsubmit işleyicisi ekleyin (düz js veya jquery $ (). Submit (fn) aracılığıyla) ve özel koşullarınız karşılanmadığı sürece false değerini döndürün.

Jquery ile daha spesifik:

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

Formun gönderilmesini istemediğiniz sürece - bu durumda, neden form öğesindeki "eylem" özelliğini dışarıda bırakmıyorsunuz?

Chrome uzantıları yazmak, kullanıcı girişi için bir formunuzun nerede olabileceğine bir örnektir, ancak formun gönderilmesini istemezsiniz. Action = "javascript: void (0);" kullanırsanız, kod muhtemelen çalışacaktır, ancak satır içi Javascript çalıştırmayla ilgili bir hata aldığınız bu sorunla sonuçlanacaksınız .

İşlemi tamamen dışarıda bırakırsanız, form yeniden yüklenir ve bu da bazı durumlarda bir Chrome uzantısı yazarken istenmeyen bir durumdur. Ya da, kullanıcının bir miktar girdi sağlayıp "Hesapla" ya da buna benzer bir şeyi tıkladığı bir tür yerleşik hesap makinesi içeren bir web sayfanız varsa.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.