Firefox 4: มีวิธีลบขอบสีแดงในรูปแบบที่จำเป็นหรือไม่?


88

เมื่อกำหนดจำเป็นในช่องแบบฟอร์ม Firefox 4 จะแสดงเส้นขอบสีแดงให้กับองค์ประกอบนี้โดยอัตโนมัติแม้กระทั่งก่อนที่ผู้ใช้จะกดปุ่มส่ง

<input type="text" name="example" value="This is an example" required />

ฉันคิดว่านี่เป็นการรบกวนผู้ใช้เนื่องจากเขา / เธอไม่ได้ทำผิดพลาดในตอนเริ่มต้น

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

ฉันดู:requiredและ:invalidจากตัวเลือกหลอกใหม่ แต่การเปลี่ยนแปลงมีไว้สำหรับก่อนและหลังการตรวจสอบความถูกต้อง (จากFirefox 4 รูปแบบการป้อนข้อมูลที่จำเป็นขอบสีแดง / โครงร่าง )

มีวิธีปิดใช้งานเส้นขอบสีแดงก่อนที่ผู้ใช้จะส่งแบบฟอร์มหรือไม่และแสดงว่ามีบางช่องที่หายไป


1
เค้าร่างเป็นไง: 0; เหรอ?
Ace

คำตอบ:


153

นี่เป็นเรื่องยุ่งยากเล็กน้อย แต่ฉันได้ตั้งค่า exmaple นี้: http://jsfiddle.net/c5aTe/ซึ่งใช้งานได้สำหรับฉัน โดยทั่วไปเคล็ดลับดูเหมือนว่าจะมีข้อความตัวยึดตำแหน่งซึ่งไม่ถูกต้อง มิฉะนั้นคุณควรจะทำได้:

input:required {
    box-shadow:none;
}
input:invalid {
    box-shadow:0 0 3px red;
}

หรืออะไรที่คล้ายกัน ...

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

หวังว่าจะช่วยได้!

แก้ไข

ดู๊ !! - ฉันรู้สึกงี่เง่า ฉันได้อัปเดตซอของฉัน: http://jsfiddle.net/c5aTe/2/ - คุณสามารถใช้:focusคลาสหลอกเพื่อให้องค์ประกอบมีสไตล์ราวกับว่าถูกต้องในขณะที่ผู้ใช้พิมพ์ สิ่งนี้จะยังคงเน้นเป็นสีแดงหากเนื้อหาไม่ถูกต้องเมื่อรายการสูญเสียโฟกัส แต่ฉันคิดว่ามีเพียงสิ่งเดียวที่คุณสามารถทำได้กับพฤติกรรมที่ออกแบบไว้ ...

HTH :)


แก้ไขหลังจากยอมรับ:

สรุปตัวอย่างตามคำขอของ OP (โปรดทราบว่าสองรายการแรกออกแบบมาสำหรับ FF4 เท่านั้นไม่ใช่ Chrome )

  1. แก้ไข FF ตรวจสอบข้อความเจ้าของสถานที่ของคุณ: http://jsfiddle.net/c5aTe/
  2. แก้ไขการตรวจสอบ FF ขณะที่คุณพิมพ์: http://jsfiddle.net/c5aTe/2
  3. การสลับรูปแบบ / การตรวจสอบโซลูชัน JS: http://jsfiddle.net/c5aTe/4

การพัฒนาที่ยอดเยี่ยม แต่ข้อผิดพลาด "ไม่ถูกต้อง" ดูเหมือนจะปรากฏขึ้นเมื่อผู้ใช้คลิกที่อินพุต => เมื่ออินพุตว่างเปล่าก่อนที่เขาจะเขียนอะไรบางอย่าง แต่บางทีสิ่งที่ฉันต้องการคือข้อบกพร่องใน FF4 ที่ไม่สามารถแก้ไขได้: /
Cyril N.

แต่ +1 สำหรับวิธีการ จำกัด เงากล่องสีแดงที่น่ากลัว :)
Cyril N.

อย่าคิดว่าคุณสามารถทำได้เพราะแปลกเกือบจะฉลาดเกินไปและตรวจสอบได้ทันที คุณอาจฉลาดขึ้นด้วยจาวาสคริปต์เพิ่มเติมที่เพิ่มหรือลบคลาสออกจากแบบฟอร์มเมื่อถูกส่ง จากนั้นคุณสามารถลบล้างการตรวจสอบความถูกต้องที่ไฮไลต์ตามคลาสนั้น ๆ ที่มีอยู่หรือไม่ สิ่งที่ดีเกี่ยวกับเรื่องนี้คือยังคงใช้การตรวจสอบความถูกต้องแบบเนทีฟซึ่งไม่ดีนักที่ต้องใช้ js เพิ่มเติม ... : |
Stuart Burrows

1
มีแรงบันดาลใจในการทำอาหารเช้า - เพิ่มไว้ด้านบน!
Stuart Burrows

ฉลาด! : p แต่ถ้าคุณดูคุณมีเงาสำหรับสถานะดั้งเดิมและเงาของกล่องสำหรับสถานะที่ไม่ถูกต้อง ทั้งสองคนแสดงอยู่ ฉันเริ่มเชื่อว่านี่เป็นความผิดพลาดจาก Mozilla พวกเขาไม่ได้คิดเกี่ยวกับสถานะเริ่มต้น หากสิ่งนี้ถูกต้องและไม่มีใครเพิ่มวิธีการทำงานได้อย่างสมบูรณ์ฉันจะไม่ยอมรับคำตอบของคุณ แต่ฉันจะให้รางวัลแก่คุณ (หวังว่าจะเป็นไปได้ถ้าไม่ฉันจะยอมรับคำตอบของคุณ) คุณสมควรได้รับ :) ขอบคุณสำหรับความช่วยเหลือของคุณ!
Cyril N.

37

ใน Firefox 26 CSS จริงที่ใช้ในการระบุฟิลด์บังคับที่ไม่ถูกต้องมีดังต่อไปนี้ (มาจาก form.css):

:not(output):-moz-ui-invalid {
    box-shadow: 0 0 1.5px 1px red;
}

ในการทำซ้ำในเบราว์เซอร์อื่นฉันใช้:

input:invalid {
    box-shadow: 0 0 1.5px 1px red;
}

ฉันเล่นกับการตั้งค่าพิกเซล แต่ฉันไม่เคยเดา 1.5px โดยไม่ดูแหล่งที่มาของโมซ

หากต้องการปิดใช้งานคุณสามารถใช้:

input:invalid {
    box-shadow: none;
}

ความแม่นยำขนาดเล็ก: มันควรจะเป็น:not(output):-moz-ui-invalidไม่ได้input:not(output):-moz-ui-invalidสำหรับผู้ที่พยายามชอบสิ่งนี้
Skoua

คุณคือตำนานแน่นอน
abejdaniels

4

ลอง:

document.getElementById('myform').reset();

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

1

นี่คือวิธีแก้ปัญหาที่ง่ายมากสำหรับฉัน โดยพื้นฐานแล้วฉันเปลี่ยนสีแดงที่น่าเกลียดเป็นสีน้ำเงินที่สวยงามมากซึ่งเป็นสีมาตรฐานสำหรับฟิลด์ที่ไม่จำเป็นและการประชุมทางเว็บ:

:required {
    border-color: rgba(82, 168, 236, 0.8);
}

0

นี้ทำงานได้ดีสำหรับฉัน:

input:invalid {
     -moz-box-shadow: none;
}

7
ปัญหาคือหลังจากการตรวจสอบความถูกต้องเงาของกล่องจะยังคงเป็นไม่มีและผู้ใช้ไม่ทราบว่าเกิดข้อผิดพลาดใด สิ่งที่ฉันต้องการคืออย่าแสดงเส้นขอบสีแดงในสถานะปกติของแบบฟอร์ม แต่ให้แสดงเมื่อผู้ใช้ส่ง / เบลอแบบฟอร์มหากมีข้อผิดพลาด
Cyril N.

-1

โปรดลองสิ่งนี้

$ ("form"). attr ("novalidate", จริง);

สำหรับแบบฟอร์มของคุณในไฟล์. js ส่วนกลางของคุณหรือในส่วนส่วนหัว


-1

วิธีที่ฉันพบอย่างน้อยที่สุดในการแก้ไขปัญหาคือ:

<input type="text" name="example" value="This is an example" onInput="this.required = true;" />

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

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