2016-02-19 14 views
6
var inputs = document.getElementsByTagName('input'); 
for (var i = 0; i < inputs.length; i++) { 
    inputs[i].onfocus = foo; 
} 
function foo(){ 
    alert(this.value); 
} 

Khi các giá trị đầu vào được bằng tay nhập:
Trên công trình mã và cảnh báo các giá trị đúng không phụ thuộc vào loại một lĩnh vực đầu vào.

Khi giá trị nhập được tự động điền bởi trình duyệt:
Mã hoạt động và cảnh báo giá trị chính xác khi trường nhập văn bản loại. Trong trường hợp của một trường mật khẩu, nó cảnh báo chuỗi rỗng!

Hành vi này có phải do chính sách bảo mật của trình duyệt không? Hoặc có cách giải quyết nào không? Tôi đã thử nó trong trình duyệt Chrome.Có cách nào để lấy giá trị của một hộp mật khẩu tự động điền trong JavaScript không?

+0

Hãy làm rõ: bạn gặp sự cố khi truy cập thuộc tính "giá trị" đã được điền trước bởi trang bạn đã phân phát hay bạn đang nói về cách Chrome điền trước các đầu vào bằng trình quản lý mật khẩu? Nếu sau này, xin vui lòng xem câu trả lời của tôi. – CzechErface

+0

Nếu thuộc tính 'giá trị' được điền trước, không có vấn đề gì. Vấn đề là khi trình duyệt tự động điền vào các ô nhập với trình quản lý mật khẩu của nó (khi bạn nói lưu mật khẩu cho trang web này). Trong trường hợp này, nếu trình duyệt không chèn một thuộc tính giá trị vào phần tử DOM, thì về cơ bản nó sẽ làm gì? Cảm ơn câu trả lời của bạn Czech, và có vẻ như không có cách nào tôi giải quyết vấn đề này! –

Trả lời

2
$(document).ready(function() { 
    $("input") 
     .blur(password) 
     .trigger('blur'); 
}); 

function password() { 
    alert($(this).val()) 
} 

DEMO

+0

Không cần jQuery ở đây: https://jsfiddle.net/7hn3ojcw/3/ Tôi nghĩ rằng @CzechErface vẫn còn tiền. Tôi không nghĩ rằng truy cập vào một đầu vào người dùng đã phổ biến (như trong ví dụ của bạn) là vấn đề, nhưng một đầu vào trình duyệt đã được điền trước. – ste2425

+1

@ ste2425 Thực ra nó cũng hoạt động với các trường pwd được điền trước, chỉ cần thử nghiệm với cả trình điền mật khẩu mặc định của Chrome và tiện ích mở rộng cuối cùng, cả hai giá trị đầu vào đều dễ dàng truy cập. –

+0

@ArturasTamulatis là với bản địa hoặc jQuery? Dù bằng cách nào tôi lấy lại bình luận của tôi, tôi sẽ chỉnh sửa nó nhưng nó đã được hơn 5 phút. – ste2425

1

Đây là một câu hỏi thú vị bởi vì tôi tin rằng bạn đang đề cập đến tác dụng phụ của một tính năng bảo mật trong Chrome. Chrome (và có thể là các trình duyệt khác) có thể không thực sự điền DOM bằng mật khẩu tự động điền bởi vì một lập trình viên độc hại có thể viết JavaScript cố gắng lấy cắp mật khẩu tự động từ các nạn nhân không ngờ khi tải trang. Bạn rất có thể sẽ yêu cầu người dùng nhấp vào nút gửi trước khi bạn có thể truy cập vào thông tin đó. Bạn có thể buộc biểu mẫu gửi và kiểm tra giá trị ngay trước khi gửi thực sự xảy ra. Nếu điều đó hoạt động, thì bạn có thể hủy bỏ việc gửi bằng cách trả về false trong "onsubmit" và bây giờ bạn có mật khẩu.

+0

Gửi biểu mẫu bằng cách sử dụng JS cũng không phải là vấn đề bảo mật? –

+0

Tôi đã cố gắng sao chép hành vi mà Akhil Dixit đang gặp phải không có kết quả. Tôi có thể đọc mật khẩu tự động điền từ DOM với cả jQuery và JavaScript đơn thuần. Tôi chỉ cố gắng cung cấp một lý do có thể cho sự không thống nhất giữa hai trình duyệt của chúng tôi (tôi cũng sử dụng Chrome). – CzechErface

Các vấn đề liên quan