Firefox ละเว้นตัวเลือกที่เลือก =“ เลือก”


112

หากคุณเปลี่ยนเมนูแบบเลื่อนลงและรีเฟรชหน้าดูเหมือนว่า Firefox จะไม่สนใจแอตทริบิวต์ที่เลือก

<option selected="selected" value="Test">Test</option>

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

มีวิธีทำให้ firefox หยุดพฤติกรรมนี้หรือไม่ (นอกเหนือจากการเริ่มทำงานเหตุการณ์อื่นเมื่อโหลดหน้าเว็บ)


ฉันประสบปัญหานี้ในขณะนี้และฉันแก้ไขโดยใช้$('option:selected').each(function(){ $(this).prop('selected',true); });
plonknimbuzz

ฉันสังเกตว่าสิ่งนี้เกิดขึ้นเฉพาะกับองค์ประกอบที่เลือกที่ไม่มีแอตทริบิวต์ชื่อ
Tlacaelel Ramon Luis

4
ลองเติมข้อความอัตโนมัติ = "ปิด"
hemanjosko

คำตอบ:


5

AFAIK พฤติกรรมนี้ได้รับการเข้ารหัสใน Firefox

คุณสามารถลองตั้งค่าองค์ประกอบของฟอร์มแต่ละรายการเป็นแบบdefaultValueโหลดหน้า


1
มีวิธีง่ายๆในการทำสิ่งนี้สำหรับองค์ประกอบทั้งหมดในแบบฟอร์มหรือไม่?
ประแจลิง

@monkey โดยใช้ jQuery มันควรจะเป็น$(":input").val(this[0].defaultValue);(ยังไม่ทดสอบ); ใน JS ปกติเดินทีละคนdocument.getElementsByTagname("select")
Pekka

แม้ว่าอาจจะไม่ใช่ทางออกที่ดี แต่ก็ใช้ได้ผล .. คุณต้องตรวจสอบ getAttribute ("selected")
Monkey-wrench

8
FYI - มีคำตอบที่ดีกว่ามากด้านล่างโดย Marco Demaio
jonlink

283

เพิ่มautocomplete="off"แอตทริบิวต์ HTML ในทุกแท็กที่เลือก

(ที่มา: https://stackoverflow.com/a/8258154/260080 )


7
นี่คือความชอบของฉัน (ขอบคุณมากมาร์โคและประแจลิงช่วยผมไว้ที่นั่นได้สองสามก้อน) และคุณจะต้องเพิ่มลงใน <input> ทุกรายการด้วยแอตทริบิวต์ "value" หรือ "checked" และ <textarea> ที่มีเนื้อหา
Swanny

22
นี่น่าจะเป็นคำตอบที่ถูกต้อง ใช้งานได้เหมือนมีเสน่ห์
Andrew Senner

1
นี่ไม่ใช่ w3c ที่ถูกต้อง
Jose De Gouveia

1
ฉันมีปัญหาเดียวกันใน Windows, Firefox เวอร์ชั่น 44.0 (2016- ม.ค. ) และวิธีนี้ยังคงใช้งานได้
Steven

1
ทำงานได้อย่างมีเสน่ห์บน firefox 47.0
Blackecho

73

ใน firefox ฉันสังเกตเห็นว่าแอตทริบิวต์ "ที่เลือก" จะไม่ทำงานเว้นแต่คุณจะวางสิ่งที่เลือกไว้ในฟอร์มโดยที่ฟอร์มนั้นมีแอตทริบิวต์ชื่อ


3
แบม! ซึ่งแก้ไขโดยที่การเติมข้อความอัตโนมัติ = "ปิด" ไม่ได้
little_birdie

ใช้เวลาหนึ่งชั่วโมงในการเกาหัวด้วย Firefox 78.0.2 ไม่จำเป็นต้องมีชื่อในแบบฟอร์มของฉัน แต่การให้ชื่อนั้นเป็นการบรรเทาทุกข์
betakilo

11

เพิ่งมีปัญหาเดียวกันเชื่อฉันว่ามันใช้เวลามากกว่า 10 ชั่วโมงในการต่อสู้กับพฤติกรรม firefox ที่โง่เขลานี้ฉันมีรายการแบบเลื่อนลง 7 รายการแต่ละรายการจะเรียกเหตุการณ์และกรอกอินพุตที่ซ่อนอยู่ 24 รายการเพื่อให้คุณสามารถจินตนาการได้ว่ามีตัวเลือกที่ถูกต้องเลือกด้วย ใส่ผิด 24 ค่า !!! วิธีแก้ปัญหาในที่สุดที่ฉันพบคือการรีเซ็ตแบบฟอร์มด้วย Javascript เพิ่มบรรทัดของรหัสนี้:

window.onload = function() { document.forms['MarkerForm'].reset(); };

PS: อินพุตมีค่าที่ดึงมาจากฐานข้อมูลดังนั้นการรีเซ็ตแบบฟอร์มจะไม่ทำให้ค่าใด ๆ ว่างเปล่า แต่เป็นการบอกให้ firefox กลับนรกไปที่ตัวเลือกที่เลือก = ตัวเลือกที่เลือก!


นี่คือคำตอบที่ถูกต้อง คำตอบที่บอกว่าให้ใช้ "เติมข้อความอัตโนมัติ" ในองค์ประกอบที่เลือกนั้นไม่ถูกต้องเนื่องจาก "การเติมข้อความอัตโนมัติ" ไม่ใช่แอตทริบิวต์ที่ถูกต้องสำหรับช่องที่เลือกตาม W3 และจะทำให้ "ไม่อนุญาตให้เติมแอตทริบิวต์อัตโนมัติในองค์ประกอบที่เลือก ณ จุดนี้" ข้อผิดพลาดในการตรวจสอบความถูกต้อง
Scott

6

Firefox จะจดจำสิ่งที่คุณเลือกก่อนหน้านี้เมื่อรีเฟรช ลองรีเฟรชอย่างหนักแทน

นอกจากนี้ปัญหาเดียวกันที่นี่: https://stackoverflow.com/a/1505693/1069232

ดูได้ที่นี่: https://bugzilla.mozilla.org/show_bug.cgi?id=274795


ดูเหมือนว่าจะเป็นคุณสมบัติของ firefox
Oleksii Kyslytsyn

5

พยายามปิดการใช้งานautocompleteแอตทริบิวต์ของอินพุตที่เลือก ... บางครั้งเบราว์เซอร์ก็เพิกเฉยselectเพราะเหตุนั้น


3

ฉันใช้ FF 25.0.1

มันไม่สนใจและselected=""selected="selected"

แต่ถ้าลองแค่selectedเลือกตัวเลือกนี้

พฤติกรรมแปลก ๆ (ไม่สอดคล้องกัน) ฉันรู้ว่าselectedเป็น HTML5 ที่ถูกต้องและเป็นรูปแบบที่สั้นที่สุด แต่ฉันมักจะเขียนโค้ดที่ตรวจสอบความถูกต้องของ XML ด้วยดังนั้นฉันจึงสามารถใช้เครื่องมือตรวจสอบ XML ใดก็ได้เพื่อตรวจสอบผลลัพธ์ของฉันอย่างเข้มงวด (และการแลกเปลี่ยนข้อมูลทำได้ง่ายมาก .. .)

ตาม W3C ตัวแปรเหล่านี้ควรใช้ได้กับแอตทริบิวต์บูลีน:

HTML5:  boolAttr="" | boolAttr="boolAttr" | boolAttr
XHTML5: boolAttr="" | boolAttr="boolAttr"

ฉันชอบตัวแรกเพราะมันเกือบจะสั้นเท่าตัวแปรสุดท้าย (ไม่ใช่ xml conformant) แต่ควรตรวจสอบความถูกต้องเป็นทั้ง XHTML5 และ HTML5 ดังนั้นฉันหวังว่า Mozilla จะแก้ไขได้!


3

ใช้. prop () แทน .attr ()

This does not work in firefox.
  $( 'option[value="myVal"]' ).attr( 'selected', 'selected' );
use this one
  $( 'option[value="myVal"]' ).prop( 'selected', 'selected' );

In other way
  $( this ).prop( 'selected', 'selected' );

การใช้.prop('selected', true);หรือ.prop('selected', false);(jQuery) เพื่อเปิด / ปิดใช้งานได้กับทั้ง Firefox และ Chrome
JimB


2

ใส่เลือกในแอตทริบิวต์แบบฟอร์มและจะใช้งานได้

<!-- will not work in firefox -->
<option selected="selected" value="Test">Test</option>

และ

<!-- this will work in firefox -->
<form>
 <option selected="selected" value="Test">Test</option>
</form>


2

ด้วยชื่อจะดีกว่า

form id="UMForm" name="UMForm" class="form"

การเลือกจะใช้แอตทริบิวต์ที่เลือก


1

การเติมข้อความอัตโนมัติก็ใช้ไม่ได้สำหรับฉันเช่นกัน

นี่คือโปรแกรมแก้ไข javscript ที่เขียนด้วย jquery ที่ฉันใช้:

$('input[type="radio"][selected]').click();

1
<option selected="selected" value="Test">Test</option>

ในกรณีนี้ใช้ได้ทั้งกับ Chrome และ Firefox

$('option[value="Test"]').prop('selected', true);

ฉันใช้.attr()แทน.prop()


1

หากต้องการแสดงรายการแรกของรายการแบบเลื่อนลงให้ใช้ ProjectName.ClearSelection();

วางบรรทัดในหน้าการออกแบบของคุณเพื่อทำงานบนเบราว์เซอร์ทั้งหมดและใส่สิ่งนี้ไว้ในโค้ดหลังการโหลดหน้า

$(document).ready(function () {
    $("#content_ProjectName option[value='1']").prop("selected", true);
});

1

สำหรับฉันวิธีแก้ปัญหาข้างต้นไม่ได้ผล ฉันต้องตั้งค่าการเลือกอย่างชัดเจนหากไม่มีการตั้งค่า:

if (foo.find(':selected').length === 0) {
    $(foo.find('option')[0]).attr('selected', 'selected');
}

0

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


นี่เป็นเรื่องจริง แต่ดูเหมือนจะไม่ช่วยแก้ปัญหาของฉัน ฉันยังคงต้องการวิธีแก้ไขเนื่องจากเหตุการณ์ onchange ของฉันไม่เริ่มทำงานเมื่อ firefox เรียกคืนการเปลี่ยนแปลงใด ๆ ในแบบฟอร์มเมื่อฉันทำการรีเฟรช
ประแจลิง

0

นี่คือทางออกของฉัน:

var select = document.getElementById('my_select');
for(var i=0; i < select.options.length; i++){
    select.options[i].selected = select.options[i].attributes.selected != undefined;
}

ฉันใส่ไว้ที่ด้านบนของหน้า (พร้อมชุดรหัสที่เหมาะสม) และมันก็เหมาะกับฉัน การแทนที่ getElementById ด้วยการวนซ้ำการเลือกทั้งหมดบนหน้าฉันปล่อยให้เป็นแบบฝึกหัดสำหรับผู้อ่าน;)


0

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

ใน Chrome สีแบบอักษรของกล่องเลือกคือสีดำ ด้วยเหตุผลบางประการใน Firefox กล่องเลือกจะสืบทอดสีแบบอักษรจากคอนเทนเนอร์ซึ่งเป็นสีขาว เมื่อฉันเพิ่มกฎ CSS เพื่อบังคับให้สีแบบอักษรของกล่องเลือกนั้นเป็นสีดำชุดค่าจะแสดงอย่างถูกต้อง


0

ไม่autocomplete="off"หรือวางไว้ในformผลงานสำหรับฉัน

สิ่งที่ทำงานคือการใช้เพียงแอตทริบิวต์ที่เลือกโดยไม่มีค่า ""เช่นนี้

<option @(Model.Source == TermSource.Instagram ? "selected" : "")>
    Instagram
</option>
<option @(Model.Source == TermSource.Facebook ? "selected" : "")>
    Facebook
</option>

ดังนั้นมันจึงแสดงผล<option selected>...</option>หรือเพียงแค่<option>...</option>

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