Ruby on Rails: ฉันจะเพิ่มข้อความตัวยึดตำแหน่งใน f.text_field ได้อย่างไร


144

ฉันจะเพิ่มplaceholderข้อความลงในf.text_fieldฟิลด์ของฉันเพื่อให้ข้อความนั้นถูกเขียนล่วงหน้าตามค่าเริ่มต้นและเมื่อผู้ใช้คลิกภายในฟิลด์ข้อความจะหายไป - อนุญาตให้ผู้ใช้พิมพ์ข้อความใหม่?


HTML5 รองรับสิ่งนี้ ในขณะเดียวกันยังมีการแก้ปัญหาจาวาสคริปต์
ghoppe

3
ฉันแนะนำให้เพิ่มคำตอบของ nslocum แทนของฉัน ของเขาถูกต้องสำหรับ Rails 3
Chuck Callebs

คำตอบ:


269

ด้วย Rails> = 3.0 คุณสามารถใช้placeholderตัวเลือก

f.text_field :attr, placeholder: "placeholder text"

4
คุณลักษณะ "ตัวยึดตำแหน่ง" รองรับโดย HTML5 ที่รองรับเบราว์เซอร์เท่านั้นโดยปล่อยให้เบราว์เซอร์ออกเช่น Internet Explorer
travis-146

1
URL ที่ถูกต้องสำหรับการแก้ไข jQuery คือhagenburger.net/BLOG/ …
szeryf

1
@KDP: ดูเหมือนว่าจะเหมือนกันใน Rails 2 แม้ว่าคุณอาจต้องการไวยากรณ์แอตทริบิวต์เก่า:f.text_field :attr, :placeholder => "placeholder text"
mwfearnley

เป็นไปได้ที่จะเพิ่มข้อความยาว - อาจเป็นไฟล์ html แยกต่างหาก - เป็นตัวยึดตำแหน่งหรือไม่? ฉันพยายามให้แม่แบบสำหรับผู้ใช้ในการเขียนเนื้อหาของพวกเขา
sofarsophie


15

สำหรับผู้ที่ใช้ Rails (4.2) Internationalization (I18n):

ตั้งค่าแอตทริบิวต์ตัวแทนเป็นจริง:

f.text_field :attr, placeholder: true

และในไฟล์ในเครื่องของคุณ (เช่น. en.yml):

en:
  helpers:
    placeholder:
      model_name:
        attr: "some placeholder text"

ขอบคุณที่ใช้งานได้ placeholder: trueผมไม่ได้ตั้งค่า หลังจากตั้งค่าเช่นเดียวกับที่คุณอธิบายมันใช้งานได้
Hendrik

2

นี่คือไวยากรณ์ที่สะอาดกว่าถ้าใช้ rails 4+

<%= f.text_field :attr, placeholder: "placeholder text" %>

ดังนั้นrails 4+ตอนนี้สามารถใช้ไวยากรณ์นี้แทนไวยากรณ์แฮช


1
แตกต่างจากคำตอบ @nslocum ที่ยอมรับอย่างไร
mlt

@mlt คำตอบที่ยอมรับได้รับการปรับปรุงคล้ายกันหลังจากให้คำตอบนี้
Abhilash

2

ฉันลองใช้วิธีแก้ไขปัญหาข้างต้นและดูเหมือนว่าบนราง 5 * ค่าเริ่มต้นที่สองคือค่าของแบบฟอร์มอินพุตสิ่งที่ใช้ได้กับฉันคือ:

text_field_tag :attr, "", placeholder: "placeholder text"

1

ในเทมเพลตมุมมองของคุณตั้งค่าเริ่มต้น:

f.text_field :password, :value => "password"

ใน Javascript ของคุณ (สมมติว่า jQuery ที่นี่):

$(document).ready(function() {
  //add a handler to remove the text
});

1
ช่องค้นหาของ Huffington Post ใช้ JS นี้ในองค์ประกอบอินพุต: onfocus="if(this.value=='Search The Huffington Post')this.value=''" value="Search The Huffington Post"ดูเหมือนจะเป็นวิธีที่ดี
นาธาน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.