ข้อผิดพลาดด้วย Firefox - ปิดการใช้งานแอตทริบิวต์ของการป้อนข้อมูลไม่รีเซ็ตเมื่อรีเฟรช


104

ฉันพบสิ่งที่ฉันเชื่อว่าเป็นจุดบกพร่องของ Firefox และฉันสงสัยว่านี่เป็นข้อบกพร่องจริงหรือไม่รวมถึงวิธีแก้ไขปัญหาสำหรับสิ่งนี้

หากคุณสร้างเว็บเพจพื้นฐานด้วยแหล่งข้อมูลต่อไปนี้:

<html>
  <head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
  </head>
  <body>
    <div>
      <input id="txtTest" type="text" />
      <input type="button" onclick="$('#txtTest').attr('disabled','disabled');" value="Set Disabled (jQuery)" />
      <input type="button" onclick="document.getElementById('txtTest').disabled = true;" value="Set Disabled (js)" />
      <input type="button" onclick="$('#txtTest').removeAttr('disabled');" value="Remove Disabled" />
    </div>
  </body>
</html>

หากคุณแบบไดนามิกและรีเฟรชหน้าเว็บที่จะยังคงอยู่คนพิการแทนการรีเซ็ตกลับสู่สภาพเดิมไม่พิการ ฉันได้ลองสิ่งนี้ใน IE8 และ Chrome และสิ่งเหล่านั้นทำงานตามที่ฉันคาดหวังโดยรีเซ็ตด้านหลังเป็นไม่ปิดใช้งานเมื่อฉันรีเฟรชdisabletextboxtextboxtextbox

ข้อมูลที่น่าสนใจอีกอย่างก็คือมันยังคงทำสิ่งเดียวกันหากอินพุตเป็น a checkboxแทนที่จะเป็นtextboxไฟล์.


2
คุณแน่ใจหรือไม่ว่าไม่ใช่แค่ "ฟีเจอร์" ของ Firefox ที่จะจดจำสถานะของinputองค์ประกอบเมื่อคุณรีเฟรช
30

@thirtydot: ฉันก็สงสัยเหมือนกันดังนั้นฉันจึงลองทดลองตั้งค่าแอตทริบิวต์ "ขนาด" แบบไดนามิกและจะได้รับการรีเซ็ตเมื่อรีเฟรชเช่นเดียวกับเบราว์เซอร์อื่น ๆ ทั้งหมด ดูเหมือนว่าสิ่งที่ฉันค้นพบจนถึงตอนนี้ก็คือ Firefox จะเก็บแอตทริบิวต์ที่ปิดใช้งานไว้เช่นเดียวกับค่าที่แท้จริงของอินพุต แต่ไม่ใช่ขนาด ...
Stephen Mesa

5
ว้าวคุณพูดถูก! ฉันตั้งค่าการเติมข้อความอัตโนมัติ = "ปิด" ไว้ที่อินพุตและสิ่งนี้จะไม่เกิดขึ้นอีกต่อไป ไม่สะดวกเลยที่ firefox จะเปิดโดยค่าเริ่มต้น!
Stephen Mesa

3
autocomplete="off"ใช่ฉันลืมคุณสามารถปิดการใช้งานด้วยโพสต์บล็อกนี้ดูคุ้นเคยสำหรับฉันดังนั้นฉันเคยเจอสิ่งนี้มาก่อน คุณควรเขียนคำตอบสำหรับคำถามของคุณเอง (หรือฉันควร?)
30

1
มีรายงานข้อบกพร่องของ Mozilla ที่เปิดอยู่เกี่ยวกับเรื่องนี้: bugzilla.mozilla.org/show_bug.cgi?id=654072
cvrebert

คำตอบ:


126

นี่คือ"คุณลักษณะ"ของ Firefox ซึ่งจะจดจำรูปแบบการป้อนค่าในการรีเฟรชหน้า ในการแก้ไขพฤติกรรมนี้คุณเพียงแค่ตั้งค่าautocomplete="off"ในแบบฟอร์มที่มีอินพุตหรือเพียงแค่ป้อนข้อมูลโดยตรง

ซึ่งจะหยุดการเติมข้อความอัตโนมัติไม่ให้ทำงานและป้องกันไม่ให้เบราว์เซอร์จำสถานะของช่องป้อนข้อมูล

หรือคุณสามารถ "ฮาร์ดรีเฟรช" ได้โดยคลิก CTRL + F5 การดำเนินการนี้จะรีเซ็ตหน้าปัจจุบันโดยสมบูรณ์


4
ฉันเพิ่งประสบปัญหานี้เมื่อผู้ใช้คลิกปุ่มย้อนกลับดูเหมือนว่าautocomplete="off"จะไม่ทำงานในกรณีนั้น
solarc

1
ฉันไม่ต้องการแบบฟอร์มฉันมีเพียงปุ่มเดียวและ Firefox "จำ" มันถูกปิดใช้งาน. ฉันสามารถรีเซ็ตได้ผ่าน JS แต่ ...
vsync

@vsync ลองตั้งค่าบนปุ่ม / องค์ประกอบอินพุต ควรทำงานด้วย!
Henrik Heimbuerger

4
คุณต้องทำสิ่งนี้บนปุ่มต่างๆ ฉันคิดว่ามันยากที่จะเชื่อว่านี่เป็นคุณสมบัติไม่ใช่ข้อบกพร่อง?
Liam

1
สิ่งนี้ส่งผลต่ออินพุตที่ซ่อนอยู่เช่นกัน
Liam

10

ในการจัดการกับปุ่มย้อนกลับให้ทำสิ่งนี้ (จากที่นี่ )

    window.addEventListener('pageshow', PageShowHandler, false);
    window.addEventListener('unload', UnloadHandler, false);

    function PageShowHandler() {
        window.addEventListener('unload', UnloadHandler, false);
    }

    function UnloadHandler() {
        //enable button here
        window.removeEventListener('unload', UnloadHandler, false);
    }

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

ฉันคิดว่า//enable button hereมันซ้ำซ้อนที่นี่ ความเข้าใจของฉันเกี่ยวกับเอกสารที่อ้างถึงก็คือการมีตัวฟังเหตุการณ์จะป้องกันไม่ให้เก็บเพจไว้ใน BFcache
myf

โปรดทราบว่าการเพิ่มตัวจัดการการยกเลิกการโหลดมีผลข้างเคียงอื่น ๆ ใน Firefox: developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/1.5/…
robocat

2

ดังที่ได้กล่าวไว้ก่อนที่คุณจะต้องเพิ่มautocomplete="off"ปุ่มของคุณ

นี่คือตัวอย่างsh+ perlเพื่อทำให้สิ่งนี้เป็นอัตโนมัติในกรณีของ<button> s ในไฟล์ / เทมเพลต HTML ของคุณ (ภายใต้สมมติฐานบางประการ):

find /path/to/html/templates -type f -name '*.html' -exec perl -pi -e \
  's/(?<=<button )(.*?)(?=>)/@{[(index($1,"autocomplete=")!=-1?"$1":"$1 autocomplete=\"off\"")]}/g' \
  {} +

สมมติฐานคือ:

  • การเปิด<button>แท็กเริ่มต้นและสิ้นสุดในบรรทัดเดียวกัน หากไม่ใช่กรณีนี้ (เช่นอาจแบ่งเป็นหลายบรรทัด) การแทนที่/gด้วย/gsควรช่วยได้ ( sตัวปรับแต่งทำให้.ตรงกับบรรทัดใหม่ด้วย)

  • HTML ที่ถูกต้อง (เช่นไม่มีอักขระตลกระหว่าง<และ>) และไม่มีค่า Escape ที่มากกว่า ( >) ภายในแท็กเปิด


0

นี่เป็นข้อผิดพลาดที่เปิดอยู่ใน Firefox นอกจากนี้ยังมีหมายเหตุในMDN:autocomplete (เลื่อนลงไปที่ช่องสีเหลืองที่สอง):

หมายเหตุ: autocompleteแอตทริบิวต์ยังควบคุมว่า Firefox จะ - ไม่เหมือนกับเบราว์เซอร์อื่น ๆ - ยังคงมีสถานะปิดใช้งานแบบไดนามิกและ (ถ้ามี) การตรวจสอบแบบไดนามิกของ<input>องค์ประกอบ<textarea>องค์ประกอบหรือทั้ง<form>หน้าในการโหลดหน้า คุณลักษณะการคงอยู่จะเปิดใช้งานโดยค่าเริ่มต้น การตั้งค่าของautocompleteแอตทริบิวต์เพื่อoffปิดใช้งานคุณลักษณะนี้ สิ่งนี้ใช้ได้แม้ในขณะที่โดยปกติแล้วแอตทริบิวต์การเติมข้อความอัตโนมัติจะไม่ใช้ตามประเภท ดูข้อผิดพลาด 654072

หากคุณใช้ Bootstrap คุณอาจสนใจไฟล์

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