Comment consulter html id élément spécifié dans Visualforce et passer sur la fonction javascript?

StackOverflow https://stackoverflow.com/questions/4190072

Question

Je pointe tag qui génèrent champ de texte entrée.

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

Quand quelqu'un clique sur ce champ, je veux exécuter javascript.

Mais quand je vérifie la source HTML, cette balise de pointe qui devient balise d'entrée a (je pense) partie générée dynamiquement.

   <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">

Comme vous pouvez le voir id a une partie indésirable: (

id="j_id0:j_id3:j_id4:c_txt"

Dans mon Javascript, je suis en train de getElementById('c_txt') mais cela ne fonctionne pas bien sûr. Comment traiter ce ???

UPDATE

On dirait que je peux le faire, mais ne fonctionne pas ...

<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);

s null 'Les spectacles d'alerte donc quelque chose doit être faux.

Même cette alerte retourne null ...

var targetDateField = document.getElementById('{!$Component.my_page:c_txt}');
alert(targetDateField);
Était-ce utile?

La solution 2

Je suis la solution à mon problème.

$ Compoent expression globale de Visualforce ne peut être utilisé dans le code Visualforce pas à l'intérieur de Javascript aussi loin que ma recherche.

Ci-dessous le code fonctionne très bien. Il produit la valeur dans le champ inputText à js message d'alerte vous pouvez maintenant passer l'attribut id du Javascript et du processus quelle que soit la tâche nécessaire.

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>

Autres conseils

Vous pouvez utiliser la notation $Component en javascript, vous l'utilisez comme ceci:

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

Une chose à se méfier de bien, est si votre élément est contenu dans plusieurs niveaux de balises Visualforce qui ont ID:

<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}");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top