สร้างหน้าเพื่อบอกให้เบราว์เซอร์ไม่ต้องแคช / สงวนค่าอินพุต


117

เบราว์เซอร์ส่วนใหญ่แคชค่าอินพุตฟอร์ม ดังนั้นเมื่อผู้ใช้รีเฟรชเพจอินพุตจะมีค่าเหมือนกัน

นี่คือปัญหาของฉัน เมื่อผู้ใช้คลิกบันทึกเซิร์ฟเวอร์จะตรวจสอบข้อมูล POSTed (เช่นผลิตภัณฑ์ที่ตรวจสอบแล้ว) และหากไม่ถูกต้องจะส่งกลับไปที่เบราว์เซอร์ อย่างไรก็ตามตามที่ระบุไว้ข้างต้นแม้ว่าเซิร์ฟเวอร์จะล้างการเลือกสำหรับค่าบางค่า แต่อาจยังคงถูกเลือกเนื่องจากแคชของเบราว์เซอร์!

ข้อมูลของฉันมองไม่เห็นช่องทำเครื่องหมาย (จนกว่าจะเลือกรายการหลัก) ดังนั้นผู้ใช้อาจไม่รู้ด้วยซ้ำว่ายังคงมีการเลือกค่าก่อนหน้าบางค่าอยู่จนกว่าจะคลิกบันทึกอีกครั้งและได้รับข้อความแสดงข้อผิดพลาดแม้ว่าผู้ใช้จะคิดว่าไม่ใช่ก็ตาม ซึ่งระคายเคือง.

สิ่งนี้สามารถแก้ไขได้ด้วยการทำCtrl+ F5แต่ก็ไม่ใช่วิธีแก้ปัญหา มีวิธีอัตโนมัติ / ทางโปรแกรมในการบอกเบราว์เซอร์ไม่ให้แคชข้อมูลอินพุตของฟอร์มในบางฟอร์ม / เพจหรือไม่?


1
เป็น<form autocomplete="off"...ตัวเลือกสำหรับคุณ? ปัญหานี้เกิดขึ้นกับเบราว์เซอร์ทั้งหมดหรือเพียงตัวเดียว?
David Kolar

มีวิธีตอบคำถามนี้โดยอ้างอิงจาก<select>รายการแบบเลื่อนลงหรือไม่ ฉันมีรายการและได้กำหนดselectedตัวเลือก แต่การรีเฟรชหน้าจะยังคงรักษาตัวเลือกที่เลือกไว้ก่อนหน้านี้
Martin

ฉันต้องการบรรลุสิ่งที่ตรงกันข้าม - รักษาค่าอินพุตของแต่ละหน้าไว้ที่ปุ่มย้อนกลับ (คลิกย้อนกลับสองครั้งรับอินพุตตามลำดับ) มีตัวอย่างมากมายเกี่ยวกับการใช้โค้ด JS จำนวนมาก (ซึ่งไม่ได้ผล IMHO จริงๆ) แต่ - มีวิธีที่ง่ายกว่านี้หรือไม่? ฉันลองเติมข้อความอัตโนมัติ = "เปิด" ทั้งในแบบฟอร์มและช่องป้อนข้อมูลไม่ได้ผล เบราว์เซอร์คือ Chrome
Dmitry z

คำตอบ:


197

คุณกำหนดค่าเป็นค่าว่างอย่างชัดเจนหรือไม่? ตัวอย่างเช่น:

<input type="text" name="textfield" value="">

สิ่งนี้ควรหยุดเบราว์เซอร์ที่ใส่ข้อมูลในที่ที่ไม่ควร หรือคุณสามารถเพิ่มautocompleteแอตทริบิวต์ให้กับแท็กฟอร์ม:

<form autocomplete="off" ...></form>

1
ฉันพูดถึงช่องทำเครื่องหมายจึงไม่สามารถตั้งค่าเป็น "" ได้ และการปิดการเติมข้อความอัตโนมัติหมายความว่าจะไม่เก็บค่าอินพุตของฟอร์ม "เมื่อผู้ใช้กด F5" ไม่ใช่เฉพาะ "สำหรับรายการเติมข้อความอัตโนมัติแบบเลื่อนลง"
queen3

2
ตามที่developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion การเติมข้อความอัตโนมัติ = ปิดมีผลกับ "การแคชประวัติเซสชัน" อย่างน้อยก็ใน Gecko ฉันจะทดสอบว่ามันใช้ได้กับสิ่งที่ฉันต้องการหรือไม่
queen3

1
@ queen3: ใช่ช่องทำเครื่องหมายเป็นปัญหาเนื่องจากไม่มีวิธีใดที่จะพูดว่า "ไม่ได้เลือก" อย่างชัดเจน หากคุณยังคงประสบปัญหาคุณสามารถลองchecked="false"ใช้งานได้ในบางเบราว์เซอร์ อีกทางเลือกหนึ่งคือใช้ Javascript / jQuery เพื่อยกเลิกการเลือกช่องทำเครื่องหมายทั้งหมดในการโหลดหน้าเว็บอย่างชัดเจน
แพะไม่พอใจ

1
@ queen3 คุณหมายถึง "เติมข้อความอัตโนมัติ = ปิด" ไม่ใช่ "การเติมข้อความอัตโนมัติ = ปิด"
Matt Baker

2
คำตอบและคำแนะนำทั้งหมดไม่ได้ผลสำหรับฉัน การใช้ chrome และ develeoping .net
hakan

46

จากการอ้างอิง Stack Overflow

มันใช้ไม่ได้กับ value = "" หากเบราว์เซอร์บันทึกค่าไว้แล้วดังนั้นคุณควรเพิ่ม

สำหรับแท็กอินพุตมีแอตทริบิวต์การเติมข้อความอัตโนมัติที่คุณสามารถตั้งค่าได้:

<input type="text" autocomplete="off" />

คุณสามารถใช้การเติมข้อความอัตโนมัติสำหรับแบบฟอร์มได้เช่นกัน


9
ใน Chrome ดูเหมือนว่าจะautocomplete="off"ไม่มีผลเมื่อใช้กับองค์ประกอบของฟอร์มแต่ละรายการแม้จะvalueตั้งค่าแอตทริบิวต์ไว้อย่างชัดเจนและในขณะที่ส่งCache-Control: Must-Revalidateส่วนหัวก็ไม่มีผลใด ๆ ฉันต้องใช้autocomplete="off"แอตทริบิวต์กับ<form>องค์ประกอบเพื่อระงับพฤติกรรมนี้ใน Chrome
mindplay.dk

ฉันเติมข้อความอัตโนมัติ = "ปิด" ในแบบฟอร์ม แต่ไม่ได้ผลสำหรับฉัน
Kingsley Simon

ฉันต้องการข้อมูลเพิ่มเติม @KingsleySimon เช่นเบราว์เซอร์และคุณอาจมีการตั้งค่าบางอย่างในเบราว์เซอร์ของคุณที่ป้องกันพฤติกรรมที่ถูกต้อง
shareef

1
ดูเหมือนว่าพฤติกรรมของเบราว์เซอร์จะเปลี่ยนไป: developer.mozilla.org/en-US/docs/Web/Security/…
david

และสังเกตรูปแบบ html ที่ถูกต้อง และตัวอย่างเช่นมันไม่ได้เป็นรูปแบบอื่น ๆ เป็นต้น
shareef

10

อีกวิธีหนึ่งคือการรีเซ็ตแบบฟอร์มโดยใช้ JavaScript หลังฟอร์มใน HTML:

<form id="myForm">
  <input type="text" value="" name="myTextInput" />
</form>

<script type="text/javascript">
  document.getElementById("myForm").reset();
</script>


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