Estoy llamando a una función en el elemento mismo a través de un atributo onclick porque necesito php para dar dinámicamente un valor en uno de los parámetros de las funciones. Cuando intento hacer referencia al elemento que llama en la función a través de "$ (this)", termina haciendo referencia a toda la ventana y no al elemento. ¿Cómo puedo solucionar esto?Jquery: Seleccione el elemento que llamó a la función
Respuesta
Dudo que realmente necesite usar un atributo onclick
en línea. Puede almacenar datos en un elemento de diferentes maneras. Es difícil decir exactamente cómo lo haría sin saber cuál es el parámetro que necesita aprobar, pero le daré algunos ejemplos.
El más flexible sería probablemente en un atributo data-
:
<a href="#" id="subject" data-type="fiction">Text</a>
A continuación, puede acceder a la información de la siguiente manera:
$(document).ready(function(){
$('#subject').click(function(){
$type = $(this).data('type'); // this works as of jQuery 1.4.3, otherwise $(this).attr('data-type');
// do your handling here, using $type
});
});
También puede hacerlo utilizando las clases, las etiquetas de secuencia de comandos que crean variables globales, todo tipo de métodos. Es casi seguro que esto será mejor que poner manejadores jQuery en los atributos onclick
.
intenta enviar el elemento como parámetro a la función de esa manera:
<input type="text" onclick="myfunction(this);"></input>
su función debe ser:
<script>
function myfunction(currentElement){
// ...
}
</script>
La solución es almacenar el valor dinámico en un atributo personalizado, no es un controlador onclick. La especificación HTML define cualquier atributo que comience con "datos-" como datos personalizados utilizados exactamente para este tipo de cosas, y está en la especificación, por lo que se validará. Así que usted puede hacer algo como esto (usando PHP para el ejemplo, ajustar en consecuencia):
<input type="text" id="some-input" data-some-dynamic="<?php echo $something; ?>">
luego recuperarlo en el Javascript, así:
$(document).ready(function() {
$('#some-input').click(function() {
// $(this) -- is the input element
// $(this).attr('some-dynamic-attribute') -- contains the dynamic data you need
});
});
Creo que este método es superior a la utilización de los manipuladores de atributos como onclick = "", simple porque es más sólido desde una perspectiva de diseño; separación de preocupaciones y todo eso.
Gracias por la respuesta bien pensada. Aunque no necesariamente lo que necesitaba, es un método muy interesante. –
Allen: esta respuesta es la misma que la que el día anterior le dio junto con una alternativa. –
Esta respuesta originalmente tenía dos alternativas, pero como HTML5 ahora es compatible con todos los navegadores modernos, he actualizado la respuesta para incluir solo la solución "data-X". –
- 1. Obtener ID del elemento que llamó a una función
- 2. Jquery seleccione el siguiente elemento
- 3. jQuery - Pase el elemento a la función
- 4. ¿Cómo obtener el módulo desde el que se llamó a la función en ejecución?
- 5. jQuery seleccione elemento dentro de una clase
- 6. Seleccione cada enésimo elemento en jQuery?
- 7. Seleccione el primer elemento span que no esté vacío
- 8. Perfilado en Python: ¿Quién llamó a la función?
- 9. php: determine dónde se llamó a la función desde
- 10. seleccione un elemento secundario en el objeto jquery
- 11. jQuery pasando el ID del elemento a la declaración jquery?
- 12. Cómo contar la cantidad de veces que se llamó a una función, FP way
- 13. La función jQuery click solo funciona en el primer elemento
- 14. ListBox y Datasource: evita que se seleccione el primer elemento
- 15. ¿Cómo puedo obtener el nombre del script que llamó a una función?
- 16. jquery: seleccione todos los hermanos con css a la izquierda: posición mayor que la izquierda: posición de un elemento
- 17. ActionResult volver a la página que lo llamó
- 18. jquery seleccione iframe niños
- 19. JQuery seleccione un elemento dentro de un td
- 20. ¿Qué es esto elemento en una función jquery?
- 21. Jquery quitar el elemento de la matriz
- 22. Seleccione el primer resultado de la IU de jquery automáticamente
- 23. jQuery - pestaña de captura Seleccione el evento
- 24. jQuery seleccione hermanos 'hasta'
- 25. jQuery: seleccione la clase y la identificación de un elemento al mismo tiempo?
- 26. jQuery: seleccione la clase padre por hijo?
- 27. jQuery seleccione la opción controlador de clic
- 28. jQuery: Seleccione solo una clase que contenga una cadena?
- 29. jQuery MultiFile seleccione el botón de archivo
- 30. Encontrar el nombre de archivo que llamó mi función en PHP
Esta es una buena pregunta, y aunque las respuestas proporcionadas sugieren algunas soluciones, ninguna de ellas aborda la pregunta original. Me gustaría saber la respuesta también. ¿Por qué obtiene la ventana para $ (esto), en lugar del elemento cliqueado? –