Dönüş tuşuna basıldığında form nasıl gönderilir?


84

Biri bana dönüş tuşuna basıldığında ve formda düğme yoksa nasıl HTML formu göndereceğimi söyleyebilir mi? Gönder düğmesi orada değil . Bunun yerine özel bir div kullanıyorum.

Yanıtlar:


61

IMO, bu en temiz cevap:

<form action="" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password"/><br/>
  <div class="yourCustomDiv"/>
  <input type="submit" style="display:none"/>
</form>

Daha da iyisi, formu özel div kullanarak göndermek için javascript kullanıyorsanız, onu oluşturmak için javascript de kullanmalı ve düğmede display: none stilini ayarlamalısınız. Bu şekilde, javascript'i devre dışı bırakan kullanıcılar gönder düğmesini görmeye devam edecek ve üzerine tıklayabilecektir.


Ekranın: hiçbiri IE'nin girişi yok saymasına neden olmayacağı kaydedildi. Bir oluşturulan yeni JSFiddle örneğini standart form olarak başlar ve kullanımları ilerici geliştirme göndermek ve yeni div oluşturmak gizlemek söyledi. StriplingWarrior'dan CSS stilini kullandım .


7
Yukarıda açıklanan yol IE'de çalışmaz. IE, gizli gönder düğmesini yok sayar.
Chuck Phillips

@ChuckPhillips Cevap, IE'de de doğru çalışması gereken yeni bir örnekle güncellendi.
Chris Marasti-Georg

1
Bunu Safari'de (5.1.2) denedim ve çalışmıyor. Ben sadece aynı sayfada kalıyorum. "Display: none" stilini kaldırmayı denedim. Ve işe yaradı! Görünüşe göre Safari'nin görünmesi için gönder düğmesinin olması gerekiyor.

3
Chrome 19.0.1084.56 sürümünde de çalışmaz - çalışmak için gönder düğmesinin görünür olması gerekir. Chrome, Safari ve IE'de çalışan güvenilir bir düzeltme için aşağıdaki StriplingWarrior'ın yanıtına bakın.
user2398029

87

Enter tuşuna basıldığında formu göndermek için bu satırlar boyunca bir javascript işlevi oluşturun.

function checkSubmit(e) {
   if(e && e.keyCode == 13) {
      document.forms[0].submit();
   }
}

Ardından etkinliği ihtiyacınız olan kapsama ekleyin, örneğin div etiketine:

<div onKeyPress="return checkSubmit(event)"/>

Yine de bu aynı zamanda Internet Explorer 7'nin varsayılan davranışıdır (muhtemelen daha önceki sürümler de).


1
Firefox pop-up engelleyicisi bunu yakalıyor gibi görünüyor = |.
John

4
Enter tuşunu basılı tutma eyleminin birden çok tetiklenmemesi için "anahtar oluşturmayı" tercih ederim.
Justin Skiles

54

Çeşitli javascript / jQuery tabanlı stratejileri denedim, ancak sorun yaşamaya devam ettim. Ortaya çıkan en son sorun, kullanıcı tarayıcının yerleşik otomatik tamamlama listesinden seçim yapmak için enter tuşunu kullandığında yanlışlıkla gönderilmeyi içeriyordu. Sonunda şirketimin desteklediği tüm tarayıcılarda işe yarayan bu stratejiye geçtim:

<div class="hidden-submit"><input type="submit" tabindex="-1"/></div>
.hidden-submit {
    border: 0 none;
    height: 0;
    width: 0;
    padding: 0;
    margin: 0;
    overflow: hidden;
}

Bu, Chris Marasti-Georg tarafından şu anda kabul edilen cevaba benzer, ancak kaçınarak display: none, tüm tarayıcılarda düzgün çalışıyor gibi görünüyor.

Güncelleme

Yukarıdaki kodu bir negatif içerecek şekilde düzenledim, tabindexböylece sekme anahtarını yakalamasın. Bu, teknik olarak HTML 4'te doğrulanmasa da, HTML5 spesifikasyonu, çoğu tarayıcının zaten uyguladığı şekilde çalışmasını sağlamak için dili içerir.


14

<button>Etiketi kullanın . W3C standardından:

BUTTON öğesi ile oluşturulan düğmeler, tıpkı INPUT öğesiyle oluşturulan düğmeler gibi işlev görür, ancak daha zengin oluşturma olanakları sunarlar: BUTTON öğesi içeriğe sahip olabilir. Örneğin, bir görüntüyü içeren bir BUTTON öğesi, türü "görüntü" olarak ayarlanmış bir GİRİŞ öğesi gibi işlev görür ve buna benzer, ancak BUTTON öğesi türü içeriğe izin verir.

Temel olarak <button>, javascript gerektirmeyen ve aynı zamanda bir form gönderebilen başka bir etiket vardır . Bir <div>etiket biçiminde ( <img />düğme etiketinin içi dahil) büyük ölçüde şekillendirilebilir . <input />Etiketteki düğmeler neredeyse esnek değildir.

<button type="submit">
    <img src="my-icon.png" />
    Clicking will submit the form
</button>

Ayarlanacak üç tür vardır <button>; onlar eşlediğiniz <input>düğme türleri.

<button type="submit">Will submit the form</button>
<button type="reset">Will reset the form</button>
<button type="button">Will do nothing; add javascript onclick hooks</button>

Standartlar

<button>İle etiketleri kullanıyorum ve biraz renkli ve işlevsel form düğmeleri elde etmek için stil. Öğeyle <a class="button">stil paylaşan bağlantılar için css yazmanın mümkün olduğunu unutmayın <button>.


9

İstediğinin bu olduğuna inanıyorum.

//<![CDATA[

//Send form if they hit enter.
document.onkeypress = enter;
function enter(e) {
  if (e.which == 13) { sendform(); }
}

//Form to send
function sendform() {
  document.forms[0].submit();
}
//]]>

Bir tuşa her basıldığında, enter () işlevi çağrılacaktır. Basılan tuş, giriş tuşuyla (13) eşleşirse, sendform () çağrılır ve karşılaşılan ilk form gönderilir. Bu yalnızca Firefox ve diğer standartlarla uyumlu tarayıcılar içindir.

Bu kodu yararlı bulursanız, lütfen bana oy verdiğinizden emin olun!


1
Bir kullanıcı formu göndermeden önce yeni bir satıra vardiya-girmek isterse ne olur?
Gaʀʀʏ

7

JQuery ile bunu nasıl yapıyorum

j(".textBoxClass").keypress(function(e)
{
    // if the key pressed is the enter key
    if (e.which == 13)
    {
        // do work
    }
});

Diğer javascript çok farklı olmaz. catch, enter tuşu olan "13" tuşa basma bağımsız değişkenini kontrol ediyor


Kodumda @ [Sean] (# 29951) 'in cevabını kullanıyorum, ancak benim de yakalamam gerektiğini anladım e.which == 10.
travis

6

Aşağıdaki komut dosyasını kullanın.

<SCRIPT TYPE="text/javascript">
<!--
    function submitenter(myfield,e)
    {
        var keycode;
        if (window.event) keycode = window.event.keyCode;
        else if (e) keycode = e.which;
        else return true;

        if (keycode == 13)
        {
            myfield.form.submit();
            return false;
        }
        else
            return true;
    }
//-->
</SCRIPT>

Kullanıcı enter tuşuna bastığında formu göndermesi gereken her alan için, aşağıdaki gibi gönderici işlevini çağırın.

<FORM ACTION="../cgi-bin/formaction.pl">
    name:     <INPUT NAME=realname SIZE=15><BR>
    password: <INPUT NAME=password TYPE=PASSWORD SIZE=10
       onKeyPress="return submitenter(this,event)"><BR>
<INPUT TYPE=SUBMIT VALUE="Submit">
</FORM>

2

Bu yöntemi kullanıyorum:

<form name='test' method=post action='sendme.php'>
    <input type=text name='test1'>
    <input type=button value='send' onClick='document.test.submit()'>
    <input type=image src='spacer.gif'>  <!-- <<<< this is the secret! -->
</form>

Temel olarak, görünmez bir görüntü türü girdisi ekliyorum (burada " spacer.gif " 1x1 şeffaf bir giftir).

Bu şekilde, bu formu 'gönder' butonu ile veya sadece klavyede enter tuşuna basarak gönderebilirim .

İşin püf noktası bu!


1
Soru, bir gönderme butonu göstermeden formun nasıl gönderileceğini sormaktır.
Marco Demaio

0

Neden div gönderme stillerini bir gönder düğmesine uygulamıyorsunuz? Eminim bunun için bir javascript vardır, ancak bu daha kolay olacaktır.


JQUery UI düğmelerini kullanarak aynı sorunu yaşıyorum. Bu widget'larla, düğmeye güzel küçük bir simge ekleme seçeneğiniz vardır (isterseniz 2). Ancak, gönder düğmesi olarak giriş etiketini kullanırsanız bu seçenek çalışmaz. Yani a, veya span veya div kullanmalısınız.
Pierre Henry



0

Cevapları genişleterek, bu benim için işe yarayan şeydi, belki birisi onu faydalı bulabilir.

HTML

<form method="post" action="/url" id="editMeta">
   <textarea class="form-control" onkeypress="submitOnEnter(event)"></textarea>
</form>

Js

function submitOnEnter(e) {
  if (e.which == 13) {
    document.getElementById("editMeta").submit()
  }
}

-1

Chris Marasti-Georg'un örneğine benzer şekilde, bunun yerine satır içi javascript kullanın. Esasen, enter tuşunun birlikte çalışmasını istediğiniz alanlara onkeypress ekleyin. Bu örnek şifre alanına etki eder.

<html>
<head><title>title</title></head>
<body>
  <form action="" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password" onkeypress="if(event.keyCode==13) {javascript:form.submit();}" /><br/>
  <input type="submit" onClick="javascript:form.submit();"/>
</form>
</body>
</html>

Sorulan soru bu değil. Amaç gönder düğmesi olmadan göndermekti ...
jason

-1

Yana display: nonedüğmeleri ve girişleri Safari ve IE çalışma olmaz, ben gerektiren en kolay yolu bulmuştur hiçbir ekstra javascript kesmek , basitçe kesinlikle konumlandırılmış eklemektir <button />biçim ve yerde o kadar ekranın dışına kadar.

<form action="" method="get">
  <input type="text" name="name" />
  <input type="password" name="password" />
  <div class="yourCustomDiv"/>
  <button style="position:absolute;left:-10000px;right:9990px"/>
</form>

Bu, Eylül 2016 itibariyle tüm büyük tarayıcıların mevcut sürümünde çalışır.

Açıkçası, sadece <button/>istendiği gibi stil vermek için tavsiye edilir (ve anlamsal olarak daha doğru) .


Hiçbir JavaScript hack'ini vurgularsınız ve yine de bir CSS saldırısı sunarsınız.
yeniden düzenlendi

-2

"Otomatik odaklama" özniteliğinin kullanılması, varsayılan olarak düğmeye giriş odağı vermeye çalışır. Aslında, formdaki herhangi bir kontrole tıklamak, formun RETURN'e tepki vermesi için bir gereklilik olan forma odaklanma sağlar. Dolayısıyla, kullanıcının formdaki başka herhangi bir kontrole tıklamaması durumunda "otomatik odaklama" bunu sizin için yapar.

Dolayısıyla, kullanıcının RETURN tuşuna basmadan önce form kontrollerinden herhangi birine tıklamaması durumunda, "otomatik odaklama" çok önemli bir fark yaratır.

Ancak o zaman bile, bunun JS olmadan çalışması için karşılanması gereken 2 koşul vardır:

a) gitmek için bir sayfa belirlemelisiniz (boş bırakılırsa çalışmayacaktır). Örneğimde bu merhaba.php

b) kontrol görünür olmalıdır. Gizlemek için muhtemelen sayfanın dışına taşıyabilirsiniz, ancak display: none veya visibility: hidden seçeneğini kullanamazsınız. Yaptığım şey, satır içi stili kullanarak onu sayfadan 200 piksel sola taşımaktı. Yer kaplamaması için yüksekliği 0px yaptım. Çünkü aksi halde yukarıdaki ve altındaki diğer kontrolleri yine de bozabilir. Ya da öğeyi yüzdürebilirsiniz.

<form action="hello.php" method="get">
  Name: <input type="text" name="name"/><br/>
  Pwd: <input type="password" name="password"/><br/>
  <div class="yourCustomDiv"/>
  <input autofocus type="submit" style="position:relative; left:-200px; height:0px;" />
</form>

Olumsuz oy veren lütfen benim çözümümde neyin sakıncalı olduğunu bana bildirebilir mi?
realtimeguy
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.