2012-04-24 40 views
97

Xem xét chức năng này:JavaScript có được yếu tố theo tên

function validate() 
{ 
    var acc = document.getElementsByName('acc').value; 
    var pass = document.getElementsByName('pass').value; 

    alert (acc); 
} 

Và HTML này phần:

<table border="0" cellpadding="2" cellspacing="0" valign="top"> 
    <tr> 
     <td class="td1">Account</td> 
     <td class="td2"><input type="text" name="acc" /></td> 
    </tr> 
    <tr class="td1"> 
     <td>Password</td> 
     <td class="td2"><input type="password" name="pass" /></td> 
    </tr> 
</table> 
<div><button onClick="validate()" class="cupid-greenx">Login now</button></div> 

Hộp cảnh báo được hiển thị, nhưng nó cho thấy "không xác định".

+0

Nếu bạn có thể thay đổi hoàn toàn, tôi khuyên bạn nên thêm trường "id" vào hai trường nhập của bạn và sử dụng 'document.getElementById', trả về chính xác một giá trị. – Odi

+3

vẫn còn tốt hơn: 'var input = document.getElementsByTagName ('input')', trả về một nodelist, từ đó bạn có thể trích xuất cả hai phần tử như vậy: var pass = inputs.item ('pass'). Chỉ cần một mẹo, điều này có thể tăng tốc mọi thứ nếu bạn đang xử lý một DOM lớn, vì 'getElementById' sẽ tìm kiếm toàn bộ cây mỗi lần, trong khi một nodelist sẽ không, vì vậy nó nhanh hơn ... –

+0

Mã dễ thương thực sự XD –

Trả lời

179

document.getElementsByName trả về một danh sách các phần tử để nó không có thuộc tính .value. do đó lỗi không xác định bạn đang thấy.

gì bạn muốn là document.getElementsByName("acc")[0].value

9

Bạn muốn điều này:

function validate() { 
    var acc = document.getElementsByName('acc')[0].value; 
    var pass = document.getElementsByName('pass')[0].value; 

    alert (acc); 
} 
+0

Cảm ơn bạn đã sử dụng ví dụ OP trong câu trả lời của bạn. –

+0

@KrisBoyd, sự khác biệt là tôi nhận được phần tử đầu tiên từ mảng được trả về bởi 'getElementsByName'. Có lẽ tôi nên làm điều đó rõ ràng hơn - cảm thấy tự do để chỉnh sửa nếu bạn thích. –

+0

Tôi đã cung cấp cho bạn một bổ sung :) không có câu trả lời cao hơn hình thức nó trong cùng một định dạng tại OP –

5
document.getElementsByName("myInput")[0].value; 
+1

Chỉ cần được rõ ràng: đây là nhận được một yếu tố ra khỏi một NodeList. :) –

21

Lưu ý số nhiều trong phương pháp này:

document.getElementsByName() 

Đó trả về một mảng của các yếu tố, vì vậy sử dụng [0] để có được sự xuất hiện đầu tiên, ví dụ

document.getElementsByName()[0] 
+7

Nó không phải là một mảng, đó là một NodeList :-) –

+1

@FlorianMargaine - Thực ra đó là [HTMLCollection] (https://developer.mozilla.org/en/DOM/HTMLCollection);) – j08691

+1

@ j08691 [nope] (https://developer.mozilla.org/en/DOM/document.getElementsByName) :) nhưng nó có thể dễ bị nhầm lẫn: p –

5

Phương thức document.getElementsByName trả về một mảng các phần tử. Bạn nên chọn đầu tiên, ví dụ.

document.getElementsByName('acc')[0].value 
+2

Nó không phải là một mảng, đó là một NodeList :-) –

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