ใช้ลิงก์ปกติเพื่อส่งแบบฟอร์ม


130

ฉันต้องการส่งแบบฟอร์ม แต่ฉันไม่ได้ใช้วิธีพื้นฐานในการใช้ปุ่มป้อนข้อมูลกับประเภทการส่ง แต่เป็นลิงก์

ภาพด้านล่างแสดงสาเหตุ ฉันใช้ลิงก์รูปภาพเพื่อบันทึก / ส่งแบบฟอร์ม เนื่องจากฉันมีมาร์กอัป css มาตรฐานสำหรับลิงก์รูปภาพฉันไม่ต้องการใช้ปุ่มส่งอินพุต

ฉันพยายามใช้onClick = "document.formName.submit ()"กับองค์ประกอบ แต่ฉันต้องการวิธี html

ข้อความแสดงแทน

ความคิดใด ๆ ?


3
ใช้ปุ่มและ css เพื่อแสดงภาพหรือใช้ javascript ไม่มีวิธีที่เป็นจริงในการสร้าง href ง่ายๆในการส่งแบบฟอร์มโดยไม่ใช้จาวาสคริปต์
Anton S

วินาทีนั้นโชคไม่ดีที่สิ่งเหล่านี้ไม่ใช่วิธีง่ายๆที่ไม่มีจาวาสคริปต์
benhowdle89

4
เหตุผลของคุณในการทำเช่นนี้ดูเหมือนเศรษฐกิจที่ผิดพลาด ดีกว่าที่จะสร้าง css มาตรฐานสำหรับปุ่มส่งและใช้แบบฟอร์มตามที่ออกแบบมาเพื่อใช้งาน มีเทคนิคการใช้ปุ่ม css มากมายอธิบายไว้ที่tripwiremagazine.com/2009/06/…
dnagirl

คำตอบ:


169

สองทาง. ทั้งสร้างปุ่มและรูปแบบมันจึงดูเหมือนว่าการเชื่อมโยงกับ CSS onclick="this.closest('form').submit();return false;"หรือสร้างการเชื่อมโยงและการใช้งาน


55
และนี่คือข้อมูลอ้างอิงสำหรับการจัดรูปแบบปุ่มเป็นลิงค์: stackoverflow.com/questions/1367409/…
flipchart

3
โปรดทราบว่าform.submit()จะไม่ทำงานหากไม่มี JavaScript
baptx

3
@baptx แม้แต่สมาร์ทโฟนรุ่นเก่าก็เปิดใช้งานจาวาสคริปต์แล้ว
Mahdi Jazini

2
@MahdiJazini ผู้คนจำนวนมากปิดการใช้งาน JavaScript โดยค่าเริ่มต้นซึ่งอาจล่วงล้ำและส่งผลต่อประสิทธิภาพในบางกรณี หาก JavaScript ล้มเหลวอาจทำให้เว็บไซต์ทั้งหมดเสียหายได้ (เช่นการใช้ CDN โดยไม่มีทางเลือกในเครื่องและโดเมนของบุคคลที่สามถูกบล็อก) หากมีข้อผิดพลาด HTML คุณยังสามารถใช้เว็บไซต์ได้ นักพัฒนาควรปฏิบัติตามหลักการเพิ่มประสิทธิภาพแบบก้าวหน้าแทน
baptx

3
หากคุณต้องการสนับสนุนผู้ใช้ที่ไม่มีจาวาสคริปต์ให้ทำตามตัวเลือกแรกที่อธิบายไว้ในคำตอบนี้จัดรูปแบบปุ่มให้เหมือนกับลิงก์ ตัวอย่างเช่นinput[type=submit].link { border: none; background: none; display: inline; color: blue; text-decoration: underline; }และ<input type=submit class="link" />
ม.ค. Sverre

87

คุณไม่สามารถทำได้จริง ๆ หากไม่มีการเขียนสคริปต์บางรูปแบบเพื่อความรู้ที่ดีที่สุดของฉัน

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

ตัวอย่างจากที่นี่


1
และผู้เยี่ยมชมที่รัก ... อย่าลืมตั้งค่า >>> id = "my_form" ไม่ใช่ id: D
Mahdi Jazini

นี่ควรเป็นคำตอบที่ดีที่สุดและชัดเจนขอบคุณ!
yehanny

28

แค่จัดแต่งทรงผมinput type="submit"แบบนี้ก็ได้ผลสำหรับฉัน:

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

ทดสอบใน Chrome, IE 7-9, Firefox


สำหรับเรกคอร์ด: คุณควรเลือกinputองค์ประกอบที่เหมาะสมโดยใช้ตัวเลือก CSS โดยไม่ต้องแนบคลาสกับองค์ประกอบ HTML
Erik Kaplun

แม้ว่าความคิดเห็นของคุณจะเป็นวิธีที่ต้องการ แต่ก็ไม่สามารถทำได้เสมอไป
Serj Sagan

เหตุใดจึงเป็นวิธีที่ต้องการ
ทำเครื่องหมาย

เป็นการฝึกเขียนโค้ดแบบกึ่งจัดตั้งโดยทั่วไปทิ้ง html ที่สะอาดกว่า ... แต่ก็ไม่ใช่เรื่องใหญ่
Serj Sagan

1
คำตอบนี้ไม่ได้ขึ้นอยู่กับจาวาสคริปต์ซึ่งเป็นสิ่งที่ต้องกังวลน้อยกว่า
Matthew Lock

10

คุณกำลังใช้รูปภาพในการส่ง .. ดังนั้นคุณสามารถใช้type="image""ปุ่ม" อินพุต:

<input type="image" src="yourimage.png" name="yourinputname" value="yourinputvalue" />

1
... หรือ<button>องค์ประกอบที่มี<img/>องค์ประกอบอยู่ในนั้น
DanMan

นี่คือลิงค์ MDN สำหรับสิ่งนี้ในกรณีที่ใครก็ตามต้องการแหล่งที่มา: developer.mozilla.org/en-US/docs/Web/HTML/Element/input/image
Sam


0

แน่นอนว่าไม่มีวิธีแก้ปัญหาด้วย HTML ที่บริสุทธิ์ในการส่งแบบฟอร์มที่มีaแท็กlink ( ) HTML มาตรฐานยอมรับเฉพาะปุ่มหรือรูปภาพ ดังที่ผู้ทำงานร่วมกันคนอื่น ๆ กล่าวไว้เราสามารถจำลองลักษณะที่ปรากฏของลิงก์ได้โดยใช้ปุ่ม แต่ฉันเดาว่านั่นไม่ใช่จุดประสงค์ของคำถาม

IMHO ฉันเชื่อว่าโซลูชันที่เสนอและได้รับการยอมรับไม่ได้ผล

ฉันได้ทดสอบในแบบฟอร์มและเบราว์เซอร์ไม่พบข้อมูลอ้างอิงของแบบฟอร์ม

ดังนั้นจึงเป็นไปได้ที่จะแก้ปัญหาโดยใช้ JavaScript บรรทัดเดียวโดยใช้thisobject ซึ่งอ้างอิงถึงองค์ประกอบที่คลิกซึ่งเป็นโหนดลูกของฟอร์มที่ต้องส่ง ดังนั้นthis.parentNodeเป็นโหนดแบบฟอร์ม หลังจากนั้นก็เรียกsubmit()วิธีการในรูปแบบนั้น ไม่จำเป็นต้องค้นคว้าจากเอกสารทั้งหมดเพื่อค้นหาแบบฟอร์มที่เหมาะสม

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

สมมติว่าฉันป้อนด้วยชื่อของฉันเอง:

แบบฟอร์มที่กรอก

ฉันใช้getในแอตทริบิวต์ form method เนื่องจากสามารถดูพารามิเตอร์ที่ถูกต้องใน URL ที่หน้าที่โหลดหลังจากส่ง

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

เห็นได้ชัดว่าโซลูชันนี้ใช้กับแท็กใด ๆ ที่ยอมรับonclickเหตุการณ์หรือเหตุการณ์ที่คล้ายกัน

thisเป็นตัวเลือกที่ยอดเยี่ยมในการกู้คืนบริบทพร้อมกับeventตัวแปร (มีให้ใช้งานในเบราว์เซอร์หลักทั้งหมดและ IE9 เป็นต้นไป) ที่สามารถใช้โดยตรงหรือส่งผ่านเป็นอาร์กิวเมนต์ไปยังฟังก์ชัน

ในกรณีนี้ให้แทนที่บรรทัดด้วยaแท็กตามบรรทัดด้านล่างโดยใช้คุณสมบัติtargetที่ระบุองค์ประกอบที่เริ่มต้นเหตุการณ์

<a href="#" onclick="event.target.parentNode.submit();"> Submit here</a>

@ นาธานไม่ค่อยได้ฝึกเขียนStackoverflowค่ะ ฉันหวังว่าการแก้ไขของคุณจะช่วยปรับปรุงสไตล์ของฉันได้ ภาษาอังกฤษของฉันก็ไม่ดีเช่นกัน
Paulo Buchsbaum

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.