Use a normal link to submit a form
Asked Answered
P

7

155

I want to submit a form. But I am not going the basic way of using a input button with submit type but a a link.

The image below shows why. I am using image links to save/submit the form. Because I have standart css markup for image links I don't want to use input submit buttons.

I tried to apply onClick="document.formName.submit()" to the a element but I would prefer a html method.

alt text

Any ideas?

Punctuate answered 26/11, 2010 at 15:20 Comment(3)
use button and css it to display the image or use javascript, there's no real way to make simple href to submit a form without javascript.Gudrin
i second that, unfortunately these isnt an easy way w/o javascriptHaploid
Your reason for doing this sounds like a false economy. Better to just come up with a standard css for submit buttons and use forms the way they were designed to be used. There are a pile of button css techniques describe here: tripwiremagazine.com/2009/06/…Diencephalon
H
212

Two ways. Either create a button and style it so it looks like a link with css, or create a link and use onclick="this.closest('form').submit();return false;".

Hageman answered 26/11, 2010 at 15:24 Comment(9)
Aaaaaaaand here's a reference for how to style a button as a link: #1367909Mincemeat
note that form.submit() will not work without JavaScriptGavin
@Gavin even old smart phones have enabled javascriptTibiotarsus
@MahdiJazini a lot of people disable JavaScript by default which can be intrusive and affect performance in some cases. If JavaScript fails, it can break the whole website (e.g. using a CDN without local fallback and the third-party domain is blocked). If there is an HTML error, you can still use the website. Developers should follow progressive enhancement principle instead.Gavin
If you want to support users without javascript, do the first option described in this answer, style a button like a link. For instance input[type=submit].link { border: none; background: none; display: inline; color: blue; text-decoration: underline; } and <input type=submit class="link" />Hageman
This will refresh the page if you use Ajax to submit even with the event.preventDefault()...Arondell
Anchor links do not have a .form property. Plus you have to return false or else the browser will follow the link instead of submit the form.Soaring
If using jQuery you should do this: <a href="#" onclick="$(this).closest('form').submit();return false;">Submit</a>Fatshan
jQuery should be used only when necessary. In this case, if the code is in another place and link is fetched by jQuery and using .on('click'), good. But in your example, it is better to leave jQuery. this.closest('form').submit();return false if faster and less code.Hageman
S
97

You can't really do this without some form of scripting to the best of my knowledge.

<form id="my_form">
<!-- Your Form -->    
<a href="javascript:{}" onclick="document.getElementById('my_form').submit(); return false;">submit</a>
</form>

Example from Here.

Superable answered 26/11, 2010 at 15:28 Comment(2)
and dear visitors... don't forget to set the >>> id="my_form" it's id not name :DTibiotarsus
This should be the best and explicit answer, thanks!Lachish
T
34

Just styling an input type="submit" like this worked for me:

.link-button { 
     background: none;
     border: none;
     color: #1a0dab;
     text-decoration: underline;
     cursor: pointer; 
}
<input type="submit" class="link-button" />

Tested in Chrome, IE 7-9, Firefox

Tricotine answered 24/4, 2013 at 16:31 Comment(6)
just for the record: you should select the appropriate input element using CSS selectors without attaching a class to the HTML element.Disillusion
Although your comment is the preferred way, this is not always possibleTricotine
Why is that the preferred way?Caesarean
It's a semi-established coding practice, generally leaves behind cleaner html... but it's not a huge dealTricotine
This answer doesn't depend on javascript either which is one less thing to worry aboutMaxfield
See also here #1367909Maxfield
T
11

You are using images to submit.. so you can simply use an type="image" input "button":

<input type="image" src="yourimage.png" name="yourinputname" value="yourinputvalue" />
Trabeated answered 26/11, 2010 at 15:27 Comment(2)
...or a <button> element with an <img/> element in it.Shelton
Here's the MDN link for this in case anyone else wanted a source: developer.mozilla.org/en-US/docs/Web/HTML/Element/input/imageShow
M
5

use:

<input type="image" src=".."/>

or:

<button type="send"><img src=".."/> + any html code</button>

plus some CSS

Mockingbird answered 26/11, 2010 at 15:28 Comment(0)
W
1

Definitely, there is no solution with pure HTML to submit a form with a link (a) tag. The standard HTML accepts only buttons or images. As some other collaborators have said, one can simulate the appearance of a link using a button, but I guess that's not the purpose of the question.

IMHO, I believe that the proposed and accepted solution does not work.

I have tested it on a form and the browser didn't find the reference to the form.

So it is possible to solve it using a single line of JavaScript, using this object, which references the element being clicked, which is a child node of the form, that needs to be submitted. So this.parentNode is the form node. After it's just calling submit() method in that form. It's no necessary research from whole document to find the right form.

<form action="http://www.greatsolutions.com.br/indexint.htm"                   
   method="get">
    <h3> Enter your name</h3>
    First Name <input type="text"  name="fname"  size="30"><br>
    Last Name <input type="text" name="lname" size="30"><br>
    <a href="#" onclick="this.parentNode.submit();"> Submit here</a>
</form>

Suppose that I enter with my own name:

Filled form

I've used get in form method attribute because it's possible to see the right parameters in the URL at loaded page after submit.

http://www.greatsolutions.com.br/indexint.htm?fname=Paulo&lname=Buchsbaum

This solution obviously applies to any tag that accepts the onclick event or some similar event.

this is a excellent choice to recover the context together with event variable (available in all major browsers and IE9 onwards) that can be used directly or passed as an argument to a function.

In this case, replace the line with a tag by the line below, using the property target, that indicates the element that has started the event.

<a href="#" onclick="event.target.parentNode.submit();"> Submit here</a>
Wurst answered 15/8, 2017 at 4:46 Comment(1)
@Nathan, I do not have much practice of writing in Stackoverflow. I hope that your corrections help me to improve my style. My English is not good either.Wurst
L
0

you can use OnClick="document.getElementById('formID_NOT_NAME').SUBMIT()"

Legislate answered 23/11, 2017 at 12:33 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.