Gönder düğmesi olmadan enter tuşuna basarak form gönderme


322

Ben enter tuşuna basarak bir form göndermeye çalışıyorum ama bir gönderme düğmesi görüntülemiyorum. Mümkünse JavaScript'e girmek istemiyorum çünkü her şeyin tüm tarayıcılarda çalışmasını istiyorum (bildiğim tek JS yolu etkinliklerle).

Şu anda form şöyle görünüyor:

<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" style="height: 0px; width: 0px; border: none; padding: 0px;" hidefocus="true" />
</form>

Hangi oldukça iyi çalışıyor. Gönder düğmesi, kullanıcı enter tuşuna bastığında çalışır ve düğme Firefox, IE, Safari, Opera ve Chrome'da gösterilmez. Ancak, yine de çözümü sevmiyorum çünkü tüm tarayıcılarda tüm platformlarda çalışıp çalışmayacağını bilmek zor.

Herkes daha iyi bir yöntem önerebilir mi? Yoksa bu kadar iyi mi?


7
CSS'nizden birkaç karakter tıraş edebilecek ve tipik olarak otomatik olarak yapılacak küçük nokta minimize edicidir - sıfır uzunluk ölçümleri için birimlere ihtiyacınız yoktur. 0px = 0pt = 0em = 0em vb.
pwdst

@pwdst bunu işaret ettiğiniz için teşekkürler - Python dünyasındanım, bu yüzden "açık, örtük olmaktan daha iyidir" ve CSS'de durumun bu olup olmadığını gerçekten merak ediyor musunuz yoksa CSS yaratıcılarının farklı bir deyimi var mı?
ericmjl

2
Sıfır, buradaki kuralın istisnasıdır @ericmjl - 0px == 0em == 0% == 0vh == 0vh vb. Diğer (sıfır olmayan) uzunluk ölçümlerinde sadece kötü uygulama değil, birimleri belirtmemek ve kullanıcı aracılarında (tarayıcılarda) farklı davranışlar göreceksiniz. Bkz developer.mozilla.org/en-US/docs/Web/CSS/length ve drafts.csswg.org/css-values-3/#lengths
pwdst

2
Şüpheniz varsa, başka bir deyişle açık bir uzunluk birimi koyun.
pwdst

3
Üniteyi 0 ile eklemek kesinlikle incitmese de, dilden bağımsız olarak hiçbirinin olmaması% 100 geçerli olmalıdır, aslında matematiksel soyutlamalara kadar. OTOH, sahip olma ve sahip olmama gibi kullanışlı bir kullanım, verilen özelliğin "gerçekten 0 olması ve bu şekilde kalması" (birim yok) ile "o şeyin şimdi sıfır olup olmadığı" mesajını iletmektir. ama tadına göre ayarlanabilir ya da her neyse ... "(ünite ile).
Sz.

Yanıtlar:


237

Deneyin:

<input type="submit" style="position: absolute; left: -9999px"/>

Bu, düğmeyi ekranın dışına doğru sola itecektir. Bununla ilgili güzel olan şey, CSS devre dışı bırakıldığında zarif bir bozulma elde etmenizdir.

Güncelleme - IE7 için Geçici Çözüm

tabindexSekmenin bu düğmeye ulaşmasını önlemek için Bryan Downing + ile önerildiği gibi (Ateş Goral tarafından):

<input type="submit" 
       style="position: absolute; left: -9999px; width: 1px; height: 1px;"
       tabindex="-1" />

9
Bu çözümü IE7'de Erebus ile aynı sonuçla denedim. Aşağıdaki kod bunu düzeltir:position: absolute; width: 1px; height: 1px; left: -9999px;
Bryan Downing

84
Ne korkunç bir kesmek :( neden ilk etapta böyle HTML? Bu durumda çalışmamak için iyi bir neden var mı?
nornagon

28
@nornagon: Bu saldırının korkunç olduğunu düşünüyorsanız, daha az korkunç olanı önermekten çekinmeyin. HTML ne olduğunu ...
Ateş Goral

13
@MooseFactorytabindex="-1"
Ates Goral

14
"güzel olan şey ... CSS devre dışı bırakıldığında zarif bir bozulma" ?! Demek istediğim, bu harika çalışıyor, ama "zarif bozulma" kısmı sadece pazarlama taktikleri. 2002 yılından bu sayfayı bulana kadar duymamıştım bile . Doğru, ilk sayfada "css tarayıcıda devre dışı bırakıldı" için tek Google sonucu 10 yıl önceydi (veya bu cevabın 2009'da verildiğini düşünerek 7).
Vicky Chijwani

97

Javascript yol gitmek gerektiğini düşünüyorum , ya da en azından ben:

<script type="text/javascript">
// Using jQuery.

$(function() {
    $('form').each(function() {
        $(this).find('input').keypress(function(e) {
            // Enter pressed?
            if(e.which == 10 || e.which == 13) {
                this.form.submit();
            }
        });

        $(this).find('input[type=submit]').hide();
    });
});
</script>


<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" />
</form>

6
güzel bir, test edilmiş ve iyi çalışıyor. Ancak böyle bir şey denemeden önce, Javascript aracılığıyla form göndermenin bazı tarayıcıların şifre tasarrufu sağlayan şeyler sunmasına neden olmayacağını unutmayın.
andyk

3
Bu, gönderme düğmesinin bir anlığına görünmesine neden olur (sayfa yüklenip JS çalışana kadar).
nornagon

15
Otomatik tamamlamadan bir seçim için bir tuşa basma tetiklenir, yani kullanıcı bir e-posta adresi giriyorsa ve enter tuşuna basarak tarayıcının otomatik tamamlamasından daha önce verilmiş olanı seçerse, formunuz gönderilir. Kullanıcılarınızın beklediği gibi değil.
cburgmer

2
Ben geçiş keydowndan keypressdaha geniş destek için, ama aynı zamanda eklemeniz gerekir e.preventDefault();önce ifChrome'u desteklemek istiyorlarsa.
Campbeln

1
@Campbeln .on('keypress'...)yerine kullanabilirsiniz . Görünüşe göre dokümanlar sizi çağırıyor .on()gibi görünüyor .preventDefault().
jinglesthula

79

Bunu denedin mi?

<input type="submit" style="visibility: hidden;" />

Çoğu tarayıcı anladığı visibility:hiddenve gerçekten işe yaramadığı display:noneiçin, bunun iyi olacağını düşünüyorum. Gerçekten kendim test etmedim, bu yüzden CMIIW.


3
hakkında tek bir şey var visibility: hidden: Eğer okuyabilirsiniz olarak W3Schools'da , visibity: yok hala düzenini etkiler. Bu boşluktan kaçınmak istiyorsanız, mutlak konumlandırmaya sahip çözüm benim için daha iyi görünüyor.
loybert

8
Her iki çözümü de birleştirebilirsiniz:<input type="submit" style="visibility: hidden; position: absolute;" />
VaclavSir

2
Kahretsin, bu IE8'de çalışmaz (formu göndermez), bu yüzden yukarıdaki çözüm kazanır:position: absolute; left: -100px; width: 1px; height: 1px;
VaclavSir

31

Gönder düğmesi olmayan başka bir çözüm:

HTML

<form>
  <input class="submit_on_enter" type="text" name="q" placeholder="Search...">
</form>

jQuery

$(document).ready(function() {

  $('.submit_on_enter').keydown(function(event) {
    // enter has keyCode = 13, change it if you want to use another button
    if (event.keyCode == 13) {
      this.form.submit();
      return false;
    }
  });

});

1
Garip numara. Düğmenizi bir metin kutusuna yaptığınızı! Ancak hile tüm tarayıcılar için işe yaradığından, size kredi verdim!
Jenna Leaf

thanks @JennaLeaf ;-) Her neyse, bu kadar tuhaf olmadığını düşünüyorum - online formların birçoğu tuşlama sadece "tetikleyici" göndermek olarak kullanın. Bir örnek google arama çubuğu olabilir (belki de tam olarak bu kodu kullanmazlar, ancak muhtemelen benzer bir şeydir).
damoiser

16

İleride bu yanıta bakan herkes için HTML5, form öğeleri için öğenize hiddenotomatik olarak uygulanacak yeni bir özellik uygular display:none.

Örneğin

<input type="submit" hidden />

Masaüstü Chrome ile çalışıyor gibi görünse de, iPhone'da Chrome veya Safari ile çalışmıyor gibi görünüyor.
Ulf Adams

@UlfAdams iPhone 12.1.2'de Chrome ve Safari ile çalışır.
Matthew Campbell

13

Aşağıdaki kodu kullanın, bu tüm 3 tarayıcıda (FF, IE ve Chrome) sorunumu çözdü:

<input  type="submit" name="update" value=" Apply " 
    style="position: absolute; height: 0px; width: 0px; border: none; padding: 0px;"
    hidefocus="true" tabindex="-1"/>

Yukarıdaki satırı, uygun ad ve değer değerine sahip kodunuzdaki ilk satır olarak ekleyin.


7

Şu anda düğmeyi gizlemek için kullandığınız kesmek yerine visibility: collapse;, stil özelliğinde ayarlamak çok daha kolay olurdu . Ancak, yine de formu göndermek için biraz basit Javascript kullanmanızı tavsiye ederim. Anladığım kadarıyla, bu tür şeylere destek bugünlerde her yerde mevcut.


7

Gizli özelliği true olarak ayarlamanız yeterlidir:

<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" hidden="true" />
</form>

4
Gizli özellik enter tuşuna basarak gönderimi devre dışı bırakır.
66Ton99

@ 66Ton99 Sadece FF'de test edin.
Gönderimi

1
"makinemde çalışıyor";) firefox'tan çok daha fazla tarayıcı var. güvenilir bir şekilde çapraz tarayıcı akıllıca çalışan bir çözüm isteyebilirsiniz.
Félix Gagnon-Grenier

Chrome 63 üzerinde çalışıyor
piotr_cz

Şu anda iPhone'da Chrome veya Safari'de çalışmıyor.
Ulf Adams

7

Bunu yapmanın en zarif yolu, gönderme düğmesini tutmaktır, ancak kenarlığını, dolgusunu ve yazı tipi boyutunu 0 olarak ayarlamaktır.

Bu, düğme boyutlarını 0x0 yapar.

<input type="submit" style="border:0; padding:0; font-size:0">

Bunu kendiniz deneyebilirsiniz ve öğeye bir anahat belirleyerek dış sınır 0x0 px öğesini "çevreleyen" bir nokta görürsünüz.

Görünmeye gerek yok: gizli, ancak geceleri uyumanızı sağlarsa, bunu da karışıma atabilirsiniz.

JS Fiddle


5

IE, gönderme düğmesi görünmüyorsa ve formun birden fazla alanı varsa form gönderme için ENTER tuşuna basmaya izin vermez. Gönder düğmesi olarak 1x1 piksel saydam bir görüntü sağlayarak istediklerini verin. Tabii ki düzenin bir pikselini alacak, ancak gizlemek için ne yapmanız gerektiğine bakın.

<input type="image" src="img/1x1trans.gif"/>

4

Bu benim çözümüm, Chrome, Firefox 6 ve IE7 + 'da test edildi:

.hidden{
    height: 1px;
    width: 1px;
    position: absolute;
    z-index: -100;
}

IE8'in konumu beğenmediği anlaşılıyor: mutlak, göndermiyor.
maxxyme

4
<input type="submit" style="display:none;"/>

Bu iyi çalışıyor ve elde etmeye çalıştığınız şeyin en açık sürümüdür.

Diğer form öğeleri arasında display:noneve visibility:hiddendiğer form öğeleri için bir fark olduğunu unutmayın .


4

HTML5 çözümü

<input type="submit" hidden />

Yukarıdaki ile aynı - iPhone'da Chrome veya Safari ile çalışmaz.
Ulf Adams


2

IE ile problemleri olanlar ve diğerleri için.

{
    float: left;
    width: 1px;
    height: 1px;
    background-color: transparent;
    border: none;
}

Hala pozisyon kullanardım: mutlak, kayan nokta düzeni etkiler.
SuperDuck

IE8'in konumu beğenmediği anlaşılıyor: mutlak, göndermiyor.
Kullanıyorum

Aynısı float: left;, kaldırıldığında gönderir.
maxxyme

2

Bunu da deneyebilirsin

<INPUT TYPE="image" SRC="0piximage.gif" HEIGHT="0" WIDTH="0" BORDER="0">

Genişlik / yükseklik = 0 px olan bir resim ekleyebilirsiniz


1
ÖNEMLİ: geçerli bir resim URL'si KULLANMALISINIZ, yoksa Firefox sayfanızda "Sorgu Gönder" metni gösterecektir
PH.

2
Varolan bir görüntüyü ekler ve yüksekliği ve genişliği sıfıra ayarlarsanız veya varolmayan bir görüntü eklerseniz, tarayıcının kaynak için boşa giden bir GET isteği yapması gerekir.
pwdst

2

Bir sürü UI çerçevesi ile çalışıyorum. Birçoğunda bir şeyleri görsel olarak gizlemek için kullanabileceğiniz yerleşik bir sınıf var.

çizme atkısı

<input type="submit" class="sr-only" tabindex="-1">

Açısal Malzeme

<input type="submit" class="cdk-visually-hidden" tabindex="-1">

Bu çerçeveleri oluşturan parlak beyinler bu stilleri şu şekilde tanımladı:

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.cdk-visually-hidden {
    border: 0;
    clip: rect(0 0 0 0);
    height: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    width: 1px;
    outline: 0;
    -webkit-appearance: none;
    -moz-appearance: none;
}

1

Belgeye hazır bir işleve ekledim. Formda hiçbir gönderme düğmesi yoksa (tüm Jquery İletişim Formlarımın gönderme düğmeleri yoktur), ekleyin.

$(document).ready(function (){
    addHiddenSubmitButtonsSoICanHitEnter();
});
function addHiddenSubmitButtonsSoICanHitEnter(){
    var hiddenSubmit = "<input type='submit' style='position: absolute; left: -9999px; width: 1px; height: 1px;' tabindex='-1'/>";
    $("form").each(function(i,el){
        if($(this).find(":submit").length==0)
            $(this).append(hiddenSubmit);
    });
}

0
input.on('keypress', function(event) {
    if ( event.which === 13 ) {
        form.submit();
        return false;
    }
});

-2

Ben kullandım:

<input class="hidden" type="submit" value="" 
onclick="document.getElementById('loginform').submit();"/>

ve:

 .hidden {
        border:0;
        padding:0;
        font-size:0;
        width: 0px;
        height: 0px;
    }

.css dosyasında. Benim için de sihirli bir şekilde çalıştı. :)

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.