2010-11-13 16 views
44

¿Hay alguna diferencia entre estas soluciones?Javascript Obtener valor de elemento

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

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

o

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

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

Editar: Como varios han señalado, hay algunos errores tipográficos (incluyendo la falta de un nombre de función en el javascript), pero conceptualmente, son los mismos y cualquiera funcionará bien. – Jeff

Respuesta

55

Sí, sobre todo, no creo que el segundo va a funcionar (y si lo hace, no es muy portable). El primero debería estar bien.

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

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

también debe trabajar

+0

Va para matrices de elementos también. Ejemplo: 'items [i] .id' – Taurib

28

La segunda función debe tener:

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

entonces son básicamente la misma función.

8

En la segunda versión, está pasando la cadena devuelta desde this.id. No el elemento en sí.

Así que id.value no le dará lo que quiere.

Debería pasar el elemento con this.

doSomething(this) 

a continuación:

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

Nota: En algunos navegadores, la segunda funcionaría si lo hizo:

window[id].value 

porque los identificadores de los elementos son una propiedad global, pero esto no es seguro.

Tiene más sentido simplemente pasar el elemento con this en lugar de ir a buscarlo nuevamente con su ID.

2

pasar el objeto:

doSomething(this) 

, usted puede obtener todos los datos de objeto:

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

O pasar el id solamente:

doSomething(this.id) 

obtener el objeto y después de ese valor :

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