2010-11-13 12 views
44

Có sự khác biệt nào giữa các giải pháp này hay không?Javascript Nhận giá trị phần tử

// HTML 
<input id="theId" value="test" onclick="doSomething(this.id, this.value)" /> 

// Javascript 
function doSomething(id, value){ 
    // ... 
} 

hoặc

// HTML 
<input id="theId" value="test" onclick="doSomething(this.id)" /> 

// Javascript 
function doSomething(id){ 
    var value = document.getElementById(id).value; 
    // ... 
} 
+0

Chỉnh sửa: Như nhiều người đã chỉ ra, có một vài lỗi chính tả (bao gồm thiếu tên hàm trong javascript), nhưng về khái niệm, chúng giống nhau và một trong hai sẽ hoạt động tốt. – Jeff

Trả lời

55

Vâng, đáng chú ý nhất mà tôi không nghĩ rằng điều thứ hai sẽ làm việc (và nếu có, không phải là rất portably). Người đầu tiên nên được ok.

// HTML 
<input id="theId" value="test" onclick="doSomething(this)" /> 

// Javascript 
function(elem){ 
    var value = elem.value; 
    var id = elem.id; 
    ... 
} 

cũng nên làm việc

+0

Nó cũng dành cho mảng phần tử. Ví dụ: 'items [i] .id' – Taurib

28

Chức năng thứ hai nên có:

var value = document.getElementById(id).value; 

Sau đó, họ về cơ bản các chức năng tương tự.

8

Trong phiên bản thứ hai, bạn chuyển Chuỗi được trả lại từ this.id. Không phải chính yếu tố đó.

Vì vậy, id.value sẽ không cung cấp cho bạn những gì bạn muốn.

Bạn cần chuyển phần tử với this.

doSomething(this) 

thì:

function(el){ 
    var value = el.value; 
    ... 
} 

Lưu ý: Trong một số trình duyệt, điều thứ hai sẽ làm việc nếu bạn đã làm:

window[id].value 

vì ID yếu tố là một tài sản toàn cầu, nhưng điều này không an toàn.

Điều quan trọng nhất là chỉ cần chuyển phần tử với this thay vì tìm nạp lại bằng ID của nó.

2

Vượt qua đối tượng:

doSomething(this) 

Bạn có thể nhận được tất cả dữ liệu từ đối tượng:

function(obj){ 
    var value = obj.value; 
    var id = obj.id; 
} 

Hoặc vượt qua id chỉ:

doSomething(this.id) 

Lấy đối tượng và sau khi giá trị đó :

function(id){ 
    var value = document.getElementById(id).value; 
}