2010-11-16 17 views
8

Tengo la etiqueta apex que genera el campo de texto de entrada.¿Cómo remitir el id del elemento html especificado en Visualforce y pasar a la función javascript?

<apex:page id="my_page"> 
    <apex:inputText id="foo" id="c_txt"></apex:inputText> 
</apex:page> 

Cuando alguien hace clic en este campo, quiero ejecutar javascript.

Pero cuando miro la fuente HTML, esta etiqueta apex que se convierte en etiqueta de entrada tiene (creo) parte generada dinámicamente.

<input type="text" size="50" value="Tue Nov 16 00:00:00 GMT 2010" 
name="j_id0:j_id3:j_id4:c_txt" id="j_id0:j_id3:j_id4:c_txt"> 

Como se puede ver de identificación tiene parte basura :(

id="j_id0:j_id3:j_id4:c_txt" 

En mi Javascript Estoy intentando getElementById('c_txt') pero esto no funciona, por supuesto. ¿Cómo lidiar con esto ???

ACTUALIZACIÓN

parece que puedo hacer esto pero no funciona ...

<apex:includeScript value="{!URLFOR($Resource.datepickerjs)}"></apex:includeScript> 

<apex:inputText id="foo" id="c_txt" onclick="javascript:displayDatePicker()" /> 

datepickerjs

var elem = getElementById('c_txt'); 
alert(elem); 

Los espectáculos de alerta 'nulo' así que algo debe estar mal.

Incluso esta alerta devuelve null ...

var targetDateField = document.getElementById('{!$Component.my_page:c_txt}'); 
alert(targetDateField); 

Respuesta

5

me dieron solución a mi problema.

$ La expresión compuesta de la fuerza de trabajo global solo se puede utilizar en código de Visualforce no dentro de Javascript en cuanto a mi búsqueda.

El código siguiente funciona bien. Muestra el valor en el campo inputText en el mensaje de alerta js Ahora puede pasar el atributo id al Javascript y procesar la tarea que sea necesaria.

Created Date: <apex:inputText id="dah" value="{!created}" size="50" 
onclick="javascript:go('{!$Component.dah}')"></apex:inputText> 

<script> 
    function go(field) { 
    var huh = document.getElementById(field).value; 
    alert(huh); //returns the string u put inside of input text field 
    } 
</script> 
6

Usted puede utilizar la notación $Component en javascript, lo usa de esta manera:

var e = document.getElementById("{!$Component.ComponentId}"); 

Una cosa a tener cuidado con los sin embargo, es si su elemento está contenido dentro de varios niveles de etiquetas Visualforce cuales tiene IDs:

<apex:pageBlock id="theBlock"> 
    <apex:pageBlockSection id="theBlockSection"> 
     <apex:commandLink action="{!someAction}" value="LINK!" id="theLink"/> 

// snip 

// in javascript you would reference this component using: 
document.getElementById("{!$Component.theBlock.theSection.theLink}"); 
+0

Gracias por proporcionar el código de muestra con el escenario de etiqueta anidada! :) –

+4

Extrañamente, si su

  • 11. ¿Cómo pasar la referencia a "esto" en la función href javascript?
  • 12. ¿Cómo acceder al elemento HTML sin ID?
  • 13. Pasar argumentos a la función de JavaScript desde código subyacente
  • 14. Cómo pasar ID de cliente del punto en el repetidor de Javascript
  • 15. ¿Cómo pasar la función del prototipo?
  • 16. jQuery - Pase el elemento a la función
  • 17. Cómo pasar la referencia 'this' a una función javascript de una etiqueta <a>
  • 18. ¿Cómo pasar la variable AngularJS a Javascript?
  • 19. Comprobar si el elemento especificado es la selección dentro
  • 20. Obtiene el elemento dentro del elemento por clase e ID - JavaScript
  • 21. Al pasar un parámetro a la función Javascript a través del selector CSS
  • 22. ¿Cómo puedo detectar el final de desplazamiento del elemento especificado por JavaScript?
  • 23. Al pasar el valor del cuadro de solicitud de la función de javascript-PostBack a C#
  • 24. Cómo pasar Evento como parámetro en la función JQuery
  • 25. pasar la función en json y ejecutar
  • 26. Cómo cambiar el valor del atributo de datos del elemento HTML en javascript
  • 27. ¿Cómo establecer el valor del campo usando id en javascript?
  • 28. Cómo mover el elemento HTML
  • 29. ¿Cómo obtener elemento hijo por ID en JavaScript?
  • 30. ¿Cómo pasar un parámetro a una función Javascript establecida dinámicamente?