Bir bağlantıya tıklayarak JavaScript içeren bir form nasıl gönderilir?


123

Gönder düğmesi yerine bir bağlantım var:

<form>

  <a href="#"> submit </a>

</form>

Tıklandığında formu göndermesini sağlayabilir miyim?


Bunu tamamen gizli bir formu bir sayfaya entegre etmek için kullanıyorum. Ancak bağlantıdan önce ve sonra satır kesmeleri var. Form öğesinden mi geliyorlar? Ve bağlantıyı yeni bir sekmede / sayfada açmak istiyorum, target="_blank"çalışmıyor gibi görünüyor.
JPT

1
tl; dr <a role="button" aria-label="submit form" href="javascript:void(0)" onclick="document.querySelector('form').submit()">Submit</a>
Josh Habdas

Yanıtlar:


211

En iyi yol

En iyi yol, uygun bir giriş etiketi eklemektir:

<input type="submit" value="submit" />

En iyi JS yolu

<form id="form-id">
  <button id="your-id">submit</button>
</form>
var form = document.getElementById("form-id");

document.getElementById("your-id").addEventListener("click", function () {
  form.submit();
});

Henüz yapmadıysanız , ikinci JavaScript kodunu bir DOMContentLoadedolayla çevreleyin (yalnızca geriye dönük uyumlulukload için seçin ):

window.addEventListener("DOMContentLoaded", function () {
  var form = document.... // copy the last code block!
});

Kolay, tavsiye edilemeyen yol (eski cevap)

onclickBağlantıya ve idforma bir öznitelik ekleyin :

<form id="form-id">

  <a href="#" onclick="document.getElementById('form-id').submit();"> submit </a>

</form>

Tüm yollar

Hangi yolu seçerseniz seçin, formObject.submit()sonunda aramanız olur ( etiketin formObjectDOM nesnesi nerede <form>).

Ayrıca, arama yapan böyle bir olay işleyicisini bağlamanız gerekir formObject.submit(), böylece kullanıcı belirli bir bağlantı veya düğmeyi tıkladığında çağrılır. İki yol var:

  • Önerilen: Bir olay dinleyicisini DOM nesnesine bağlayın.

    // 1. Acquire a reference to our <form>.
    //    This can also be done by setting <form name="blub">:
    //       var form = document.forms.blub;
    
    var form = document.getElementById("form-id");
    
    
    // 2. Get a reference to our preferred element (link/button, see below) and
    //    add an event listener for the "click" event.
    document.getElementById("your-id").addEventListener("click", function () {
      form.submit();
    });
  • Önerilmez: Satır içi JavaScript ekleyin. Bu tekniğin tavsiye edilmemesinin birkaç nedeni vardır. Önemli bir argüman, işaretlemeyi (HTML) komut dosyalarıyla (JS) karıştırmanızdır. Kod örgütlenmemiş ve sürdürülemez hale gelir.

    <a href="#" onclick="document.getElementById('form-id').submit();">submit</a>
    
    <button onclick="document.getElementById('form-id').submit();">submit</button>

Şimdi, submit () çağrısını tetikleyen UI öğesine karar vermeniz gereken noktaya geldik.

  1. Düğme

    <button>submit</button>
  2. Bir bağlantı

    <a href="#">submit</a>

Bir olay dinleyicisi eklemek için yukarıda belirtilen teknikleri uygulayın.


Bunu uygulamak istedim ama bence işe yaramıyor. İşte bir keman, jsfiddle.net/rbhr9wt2
user1149244

@ user1149244 jsFiddle'daki JavaScript bölmesinde "JavaScript" i tıklayın ve ardından "Yük Türü" nü "Kaydırma yok - <body>" (veya <head>) olarak ayarlayın. Varsayılan olarak "onLoad" olarak ayarlanmıştır, bundan sonra DOMContentReady artık etkinleşmez.
ComFreek

3
Not: Formunuzu attr ile düğme varsa name="submit", submit()formunuzun yöntem erişilebilir olmayacaktır.
2540625

Onclick yöntemi neden önerilmiyor?
nu everest

@nueverest An <input type="submit">, diyelim ki, daha semantik bir anlama sahiptir <a href="#" onclick="...">. Bu, özellikle ekran okuyucular açısından önemlidir. İkincisini kullanmanız gerekiyorsa, ARIA'yı kullanmanızı öneririm .
ComFreek

65

JQuery kullanıyorsanız ve satır içi bir çözüme ihtiyacınız varsa, bu çok iyi çalışacaktır;

<a href="#" onclick="$(this).closest('form').submit();">submit form</a>

Ayrıca, değiştirmek isteyebilirsiniz

<a href="#">text</a>

ile

<a href="javascript:void(0);">text</a>

böylece kullanıcı, bağlantıyı tıkladığında sayfanızın en üstüne gitmez.


1
Bunu bir <span> metin </span> olarak yapmanın daha iyi olacağına inanıyorum. Bu bir bağlantı değil ve href: javascript iyi değil. (yakında bir sonraki güvenlik nedenleriyle
kötüleşecek

Katılıyorum. Sorunun doğasına bakılırsa basit cevap için gittim. Kişisel olarak yaptığım şey kullanmak href="#"ve sonra jquery ile tüm bu bağlantıları seçmek ve tarayıcı kaymaması e.preventDefault()için clickolay işleyicisini çağırmak .
Maurice

3
Ben şahsen bu cevabı tercih ediyorum. Sayfanız JQuery kullanıyorsa basit, temiz ve uygulaması kolaydır. Çok esnek, çünkü üzerinde birden fazla form bulunan bir sayfam var ve kusursuz çalışıyor.
John Contarino

OnClick javascript çağrısının sonuna "return false"
eklenirse

23

Formu ve bağlantıya bazı kimlikler verebilir ve ardından onclickbağlantı ve submitformun etkinliğine abone olabilirsiniz :

<form id="myform" action="" method="POST">
    <a href="#" id="mylink"> submit </a>
</form>

ve sonra:

window.onload = function() {
    document.getElementById('mylink').onclick = function() {
        document.getElementById('myform').submit();
        return false;
    };
};

Biçimlendirme anlamlarına saygı duyduğundan ve javascript devre dışı bırakılmış kullanıcılar için bile çalışacağından, formları göndermek için bir gönder düğmesi kullanmanızı tavsiye ederim.


4

HTML ve CSS - Javascript Çözümü Yok

Düğmenizin bir Bootstrap bağlantısı gibi görünmesini sağlayın

HTML:

<form>
    <button class="btn-link">Submit</button>
</form>

CSS:

.btn-link {

    background: none;
    border: none;
    padding: 0px;
    color: #3097D1;
    font: inherit;

}

.btn-link:hover {

    color: #216a94;
    text-decoration: underline;

}

Mükemmel, basit olabildiği halde neden karmaşık hale getirelim? Ancak, "cursor: pointer;" eklerseniz daha da iyi görüneceğini düşünüyorum. hover sınıfında, imleç ele dönüşür.
Lumis

3

bu, herhangi bir özel işlev gerekmeden iyi çalışır. Php ile yazmak çok daha kolay.<input onclick="this.form.submit()"/>


OP, giriş öğesi değil bir bağlantıya tıklanarak belirtildi .
Rahil Wazir

Bu, şöyle bir şey yaparak işe yarayabilir mi<input onclick="this.form.submit()"> Some Text</input>
CodyBugstein

2
<form id="mailajob" method="post" action="emailthijob.php">
    <input type="hidden" name="action" value="emailjob" />
    <input type="hidden" name="jid" value="<?php echo $jobid; ?>" />
</form>

<a class="emailjob" onclick="document.getElementById('mailajob').submit();">Email this job</a>

3
Cevabınızın soruyu gerçekte nasıl yanıtladığını açıklayabilir misiniz? Lütfen ona daha fazla bağlam ekleyin.

1
document.getElementById("theForm").submit();

Benim durumumda mükemmel çalışıyor.

bunu şu işlevlerde de kullanabilirsiniz:

function submitForm()
{
     document.getElementById("theForm").submit();
} 

Form kimliğiniz olarak "Form" u ayarlayın. Bitti.


0

İşte sorunuz için en iyi çözüm: formun içinde şu koda sahipsiniz:

<li><a href="#">Singup</a></li>
<button type="submit" id="haha"></button>

CSS dosyasında şunu yapın:

button{
  display: none;
}

JS'de şunu yaparsınız:

$("a").click(function(){
   $("button").trigger("click");
})

İşte gidiyorsun.

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.