2011-09-22 21 views
9

He varias de estas líneas en una página:En jQuery, cómo pasar el elemento que se ha hecho clic en el método que se llama el evento onclick

<div class="save-button" onclick="Save()">Save</div> 

En mi método Save() quiero manipular la div que se hizo clic para llamar al método Save(). ¿Cómo paso eso (creo que $(this)), sin recurrir a los ids?

¡Muchas gracias!

+0

Más información si desea una respuesta más clara, pero si el método Save() está vinculado a su evento click entonces yes $ (this) funcionará. –

+0

Responde tu propia pregunta. Esto se referirá al elemento al que se hizo clic inicialmente. –

Respuesta

24

quite el save() y utilizar click() para atrapar el evento:

<div class="save-button">Save</div> 
<script> 
$('.save-button').click(function() { 
    // Now the div itself as an object is $(this) 
    $(this).text('Saved').css('background', 'yellow'); 
}); 
</script> 

[View output]

O si usted insiste en usar esas funciones a medida save():

<div onClick="save(this)">Save</div> 
<script> 
$(function() { 
    save = function (elm) { 
     // Now the object is $(elm) 
     $(elm).text('Saved').css('background', 'yellow'); 
    }; 
}); 
</script> 

[View output]

EDITAR (2015):.on ('clic', función)

<div class="save-button">Save</div> 
<script> 
$('.save-button').on('click', function() { 
    // Now the div itself as an object is $(this) 
    $(this).text('Saved').css('background', 'yellow'); 
}); 
</script> 
+0

Agregaré: Si está utilizando el segundo "método save()" en un enlace de anclaje, también debe cancelar la acción de enlace agregando 'return;' al final de la función. –

2

simplemente se refieren a ella como: $(this)

1

bastante sencillo ...

$('#myDiv').click(function(){ 
    save($(this)); 
}) 


function save($obj){ 
    $obj.css('border', '1px solid red'); 
} 
1

Dentro de la función Save() this se refiere al elemento DOM que se ha hecho clic. Puede convertir esto en un objeto jQuery con $(this).

Esto se refiere a window por defecto sin embargo, por lo que tendrá que pasar this como un parámetro de la función Guardar:

<div class="save-button" onclick="Save(this)">Save</div> 

function Save(div) { } 

ahora dentro de Guardar, puede utilizar div para referirse a la div que era clickeado

Estaba confundido acerca de cómo se comportó this. Este enlace me ayudó: http://www.quirksmode.org/js/this.html

+2

No, no es así. Dentro de 'Guardar',' this' se refiere a 'ventana'. –

+0

Tienes razón. Para hacer que 'this' haga referencia al div, deberás pasarlo a la función de guardar. Ver mi edición –

+0

Además, no puedes usar 'div', debe ser como un objeto' $ (div) 'en jQuery. De lo contrario, no actuará como $ (esto) lo haría. –

2

Dentro del controlador de eventos, this se refiere al elemento cliqueado. Sin embargo, dentro de la función a la que llama desde el controlador de eventos, que es Save, this se referirá a la ventana.

Puede establecer explícitamente lo this debe hacer referencia a dentro Save través call[MDN] (o apply):

onclick="Save.call(this, event || window.event);" 

entonces usted puede usarlo dentro de la función como $(this):

function Save(event) { 
    // `this` refers to the clicked element 
    // `$(this)` is a jQuery object 
    // `event` is the Event object 
}; 

Pero como está utilizando jQuery, realmente debería hacer

$('.save-button').click(Save); 

para vincular el controlador de eventos. Mezclar marcado con lógica no es un buen estilo. Debe separar la presentación de la lógica de la aplicación.

O si quieres Save para aceptar un elemento como parámetro, a continuación, sólo tiene que pasar que:

onclick="Save(this);" 

y con jQuery:

$('.save-button').click(function() { 
    Save(this); 
}); 
Cuestiones relacionadas