2010-11-13 7 views
44

Есть ли разница между этими решениями?Javascript Получить значение элемента

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

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

или

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

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

Редактировать: Как отметили некоторые, существует несколько опечаток (в том числе отсутствие имени функции в javascript), но концептуально они одинаковы, и каждый из них будет работать нормально. – Jeff

ответ

55

Да, в первую очередь, я не думаю, что второй будет работать (и если это так, не очень переносимо). Первый должен быть в порядке.

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

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

Следует также работать

+0

Он также относится к элементарным массивам. Пример: 'items [i] .id' – Taurib

28

Вторая функция должна иметь:

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

Тогда они в основном те же функции.

8

Во второй версии вы передаете строку, возвращаемую с this.id. Не сам элемент.

Таким образом, id.value не даст вам то, что вы хотите.

Вам необходимо будет передать элемент с помощью this.

doSomething(this) 

затем:

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

Примечание: В некоторых браузерах, второй будет работать, если вы сделали:

window[id].value 

, поскольку идентификаторы элементов являются глобальным свойством, но это не безопасно.

Это имеет смысл просто передать элемент с помощью this вместо того, чтобы снова установить его с идентификатором.

2

Передавайте объект:

doSomething(this) 

Вы можете получить все данные из объекта:

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

или передавать id только:

doSomething(this.id) 

Получить объект и после этого значения :

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