2010-02-19 35 views
5

Tôi mới sử dụng javascript. Tôi muốn nhận được tất cả các loại mật khẩu đầu vào trên trang html của tôi.Nhận tất cả mật khẩu loại nhập

Tôi biết rằng có một cách để loại bỏ những điều này bằng cách sử dụng Javascript, nhưng tôi không biết làm thế nào.

Sau đó, với mỗi người, tôi muốn chỉ định một sự kiện trên văn bản đã thay đổi.

Tôi làm cách nào để thực hiện việc này?

Cảm ơn

+0

Bạn có ý nghĩa gì với "loại nhập mật khẩu"? – Gumbo

+1

rpf

Trả lời

11

Tôi đoán bạn có nghĩa là

<input type="password"> 

Nếu vậy, bạn có thể thử một chức năng như thế này:

function getPwdInputs() { 
    var ary = []; 
    var inputs = document.getElementsByTagName("input"); 
    for (var i=0; i<inputs.length; i++) { 
    if (inputs[i].type.toLowerCase() === "password") { 
     ary.push(inputs[i]); 
    } 
    } 
    return ary; 
} 
+2

+1 để sử dụng ===. –

+4

@Marcel Korpel sự khác biệt trong trường hợp này là gì? Nếu 'đầu vào [i] .type' là null thì điều này có thể đã ném một ngoại lệ, và nếu nó không phải là một String thì' toLowerCase' sẽ không tồn tại, cũng ném một ngoại lệ. Nếu 'đầu vào [i] .type' là một chuỗi thì' toLowerCase' sẽ luôn trả về một chuỗi. – Nicole

+0

Tôi hy vọng bạn không nhớ, tôi mở rộng câu trả lời của bạn để sử dụng 'querySelectorAll' nếu nó có sẵn, nó đã tiết kiệm cho tôi những giây có giá trị viết của riêng tôi :-) –

0

Đây là chưa được kiểm tra, nhưng một cái gì đó như thế này nên làm việc:

var allElem = document.getElementsByTagName(’input’) 

for (i=0; i < allElem.length; i++) { 

      if (allElem[i].getAttribute(’type’)==‘password’) { 

       allElem[i].onchange = //<your onchange function> 
      }  
} 
3

Y ou thể làm điều này dễ dàng sử dụng jQuery:

jQuery("input[type='password']").change(function() { 
    // check input ($(this).val()) for validity here 
}); 
+3

Đối với OP: Nếu bạn không phiền khi sử dụng jQuery, giải pháp này sẽ là lựa chọn tốt nhất cho bạn, vì nó đã được xử lý sự kiện tích hợp mà không có sự kiện clobber trên đối tượng. Nếu bạn đơn giản thiết lập '.onchange', thì bạn ngắt các trình xử lý sự kiện hiện có, và nếu bạn muốn làm việc xung quanh nó, bạn sẽ phải thực hiện theo cách riêng của mình để lưu trữ các trình xử lý sự kiện ban đầu (kết quả là mã xấu) trừ khi bạn đã có một hệ thống cho điều này). – Nicole

1

jQuery là bạn của bạn ở đây. Với jQuery, nó dễ dàng như sử dụng bộ chọn:

$('input[type=password]'); 

và sau đó ràng buộc một người biết lắng nghe changed cho mỗi:

$('input[type=password]').change(function() 
{ 
    // do whatever here 
}); 
4

Tôi hy vọng Robusto không ngại tôi mở rộng giải pháp của mình một chút cho một giải pháp sẽ hoạt động tốt hơn trên các trình duyệt hiện đại. Chrome, Safari, IE8 và Firefox đều hỗ trợ querySelectorAll, do đó, có vẻ thích hợp hơn khi sử dụng nếu có.

function getPwdInputs() 
{ 
    // If querySelectorAll is supported, just use that! 
    if (document.querySelectorAll) 
    return document.querySelectorAll("input[type='password']"); 

    // If not, use Robusto's solution 
    var ary = []; 
    var inputs = document.getElementsByTagName("input"); 
    for (var i=0; i<inputs.length; i++) { 
    if (inputs[i].type.toLowerCase() === "password") { 
     ary.push(inputs[i]); 
    } 
    } 
    return ary; 
} 

NB. Nó không phải là một vấn đề nhưng nó có thể đáng chú ý rằng querySelectorAll sẽ trả về một bộ sưu tập, trong khi phương thức dự phòng sẽ trả về một mảng. Vẫn không phải là một việc lớn, cả hai đều có tài sản length và có các thành viên được truy cập theo cùng một cách.

+1

Không, tôi không bận tâm gì cả Andy. Mọi cải tiến luôn được chào đón.Nơi tôi làm việc, chúng tôi vẫn phải hỗ trợ IE 6, vì vậy tôi rơi vào thói quen mã hóa mẫu số thấp nhất. Nhưng bạn nói đúng, document.querySelectorAll, nếu có, tiết kiệm hơn. – Robusto

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