9

我有生成输入文本字段的顶点标签。

<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()" />

日期选择器

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

警报显示为“null”,因此一定有问题。

即使这个警报返回 null ...

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

2 回答 2

6

您可以$Component在 javascript 中使用该符号,您可以像这样使用它:

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

不过要注意的一件事是,如果您的元素包含在具有 ID 的多个级别的 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}");
于 2011-12-16T09:39:32.190 回答
5

我解决了我的问题。

就我的搜索而言,$Compoent 全局 visualforce 表达式只能在不是 Javascript 内部的 visualforce 代码中使用。

下面的代码工作正常。它将 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>
于 2010-11-16T01:45:33.893 回答