Firefox 4: Có cách nào để loại bỏ viền đỏ trong một đầu vào biểu mẫu bắt buộc không?


85

Khi yêu cầu được xác định trong trường biểu mẫu, Firefox 4 tự động hiển thị đường viền màu đỏ cho phần tử này, ngay cả TRƯỚC KHI người dùng nhấn nút gửi.

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

Tôi nghĩ rằng điều này là đáng lo ngại cho người dùng vì họ không mắc lỗi ngay từ đầu.

Tôi muốn ẩn đường viền màu đỏ đó cho trạng thái ban đầu, nhưng hiển thị nó khi người dùng nhấn nút gửi nếu thiếu trường được đánh dấu là bắt buộc.

Tôi đã xem xét :required:invalidtừ bộ chọn giả mới, nhưng các thay đổi dành cho trước VÀ sau khi xác thực. (từ Firefox 4 Biểu mẫu nhập bắt buộc Viền / đường viền ĐỎ )

Có cách nào để tắt đường viền màu đỏ trước khi người dùng gửi biểu mẫu và hiển thị biểu mẫu đó nếu có một số trường bị thiếu không?


1
Làm thế nào về dàn ý: 0; ?
Ace

Câu trả lời:


150

Điều này hơi phức tạp nhưng tôi đã thiết lập exmaple này: http://jsfiddle.net/c5aTe/ đang hoạt động cho tôi. Về cơ bản, thủ thuật dường như gặp phải là có văn bản giữ chỗ không hợp lệ. Nếu không, bạn có thể làm điều này:

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

hoặc cái gì đó tương tự ...

NHƯNG vì FF4 quyết định xác thực văn bản giữ chỗ của bạn (không biết tại sao ...) giải pháp trong fiddle (ít hack - sử dụng !important) là bắt buộc.

Hy vọng rằng sẽ giúp!

BIÊN TẬP

Làm đi !! - Tôi cảm thấy thật ngớ ngẩn. Tôi đã cập nhật fiddle của mình: http://jsfiddle.net/c5aTe/2/ - bạn có thể sử dụng :focuslớp giả để giữ cho phần tử được tạo kiểu như thể hợp lệ trong khi người dùng đang nhập. Điều này sẽ vẫn đánh dấu bằng màu đỏ nếu nội dung không hợp lệ khi mục đó mất tiêu điểm nhưng tôi nghĩ bạn chỉ có thể làm được nhiều điều với hành vi được thiết kế ...

HTH :)


CHỈNH SỬA sau khi chấp nhận:

Tóm tắt các ví dụ theo yêu cầu của OP (lưu ý hai ví dụ đầu tiên chỉ được thiết kế cho FF4 - không phải Chrome )

  1. Sửa lỗi cho FF xác thực văn bản giữ chỗ của bạn: http://jsfiddle.net/c5aTe/
  2. Sửa lỗi xác thực FF khi bạn nhập: http://jsfiddle.net/c5aTe/2
  3. Giải pháp JS chuyển đổi kiểu / xác thực: http://jsfiddle.net/c5aTe/4

Đột phá tuyệt vời, nhưng lỗi "không hợp lệ" dường như được hiển thị khi người dùng nhấp vào đầu vào => khi đầu vào trống, TRƯỚC KHI anh ta thực sự viết một cái gì đó. Nhưng có lẽ những gì tôi muốn là một lỗi trong FF4 không thể được giải quyết: /
Cyril N.

Nhưng hãy +1 cho cách của bạn để hạn chế bóng hộp màu đỏ khủng khiếp :)
Cyril N.

Đừng nghĩ rằng bạn có thể làm điều này bởi vì, kỳ lạ thay, nó gần như quá thông minh và có thể xác thực nhanh chóng. Bạn có thể thông minh với một số javascript bổ sung để thêm hoặc xóa một lớp khỏi biểu mẫu khi nó được gửi. Sau đó, bạn có thể ghi đè bất kỳ đánh dấu xác thực nào dựa trên lớp đó có hiện diện hay không. Điều tuyệt vời về điều này là nó vẫn đang sử dụng xác thực gốc không tốt lắm nên yêu cầu thêm js ...: |
Stuart Burrows vào

1
đã có một số cảm hứng khi làm bữa sáng - đã thêm ở trên!
Stuart Burrows

Tài giỏi! : p Nhưng nếu bạn để ý, bạn có bóng cho trạng thái ban đầu VÀ bóng hộp cho trạng thái không hợp lệ. Cả hai đều được hiển thị. Tôi bắt đầu tin rằng đây là một sai lầm từ Mozilla, họ đã không nghĩ về trạng thái ban đầu. Nếu điều này là chính xác và không ai khác bổ sung một cách hoàn toàn hoạt động để làm điều đó, tôi sẽ không chấp nhận câu trả lời của bạn nhưng tôi sẽ trao cho bạn tiền thưởng (hy vọng điều này là có thể, nếu không, tôi sẽ chấp nhận câu trả lời của bạn). Bạn xứng đáng với nó :) Cảm ơn sự giúp đỡ của bạn!
Cyril N.

38

Kể từ Firefox 26, CSS thực tế được sử dụng để xác định các trường bắt buộc không hợp lệ như sau (đến từ form.css):

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

Để sao chép trong các trình duyệt khác, tôi sử dụng:

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

Tôi đã thử với các cài đặt pixel nhưng tôi sẽ không bao giờ đoán được 1.5px nếu không nhìn vào nguồn moz.

Để tắt nó, bạn có thể sử dụng:

input:invalid {
    box-shadow: none;
}

Độ chính xác nhỏ: nó phải là :not(output):-moz-ui-invalidkhông input:not(output):-moz-ui-invaliddành cho những người đã cố gắng thích điều này.
Skoua

Bạn là một huyền thoại tuyệt đối.
abejdaniels

2

Đây là một giải pháp rất dễ dàng phù hợp với tôi. Về cơ bản tôi đã thay đổi màu đỏ xấu xí thành màu xanh lam rất đẹp, đây là màu tiêu chuẩn cho các trường không bắt buộc và quy ước web:

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

1

Điều này làm việc tốt cho tôi:

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

7
Vấn đề ở đây là sau khi xác thực, bóng hộp vẫn không có và người dùng không có bất kỳ manh mối nào về vị trí xảy ra lỗi. Điều tôi muốn là KHÔNG hiển thị đường viền màu đỏ ở trạng thái bình thường của biểu mẫu, nhưng hiển thị nó khi người dùng gửi / làm mờ biểu mẫu nếu có lỗi.
Cyril N.


0

Hãy thử cái này,

$ ("form"). attr ("novalidate", true);

cho biểu mẫu của bạn trong tệp .js chung của bạn hoặc trong phần tiêu đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.