Как ссылаться на идентификатор элемента html, указанный в visualforce, и передавать его в функцию javascript? - PullRequest
9 голосов
/ 16 ноября 2010

У меня есть тег apex, который генерирует поле ввода текста.

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

Когда кто-то щелкает это поле, я хочу выполнить JavaScript.

Но когда я проверяю источник HTML, эта вершинатег, который становится входным тегом, имеет (я думаю) динамически сгенерированную часть.

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

Как вы можете видеть, id имеет нежелательную часть: (

id="j_id0:j_id3:j_id4:c_txt"

В моем Javascript я пытаюсьgetElementById('c_txt') но это не работает конечно. Как с этим бороться ???

ОБНОВЛЕНИЕ

Похоже, я могу это сделать, но не работает ...

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

Предупреждение показывает «ноль», поэтому что-то должно быть не так.

Даже это предупреждение возвращает ноль ...

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

Ответы [ 2 ]

6 голосов
/ 16 декабря 2011

Вы можете использовать нотацию $Component в javascript, вы используете это так:

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

Однако следует опасаться, если ваш элемент содержится в нескольких уровнях тегов Visualforce с идентификаторами:

<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}");
5 голосов
/ 16 ноября 2010

У меня есть решение моей проблемы.

$ Составное глобальное выражение Visualforce может использоваться только в коде Visualforce, а не внутри Javascript, насколько мой поиск.

Ниже код работает нормально. Он выводит значение в поле inputText в предупреждающее сообщение js. Теперь вы можете передать атрибут id в Javascript и обработать любую необходимую задачу.

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...