在 Javascript 中,可以利用 getElementById 函数来访问组件。然而,由于 JSF 动态生成组件 ID,因此获取组件 ID 至关重要。本文探讨了检索组件 ID 以在 Javascript 中使用的方法。
考虑以下场景,我们希望通过 Javascript 代码访问 inputText 组件:
<h:inputText>
function myFunc() { // Get the inputText component's contents alert("Your email address is: " + document.getElementById("emailAddress").value); }
生成的 HTML DOM 元素的结构与您在 JSF 中指定的 ID。检查生成的代码将显示分配的 ID。例如,上面示例中的 inputText 可能已呈现为:
<input type="text">
,其中“j_id0:emailAddress”表示 JSF 生成的 HTML DOM 中的实际 ID。因此,要在 Javascript 中准确引用组件,请使用生成的 ID 而不是指定的 ID。
或者,您可以为 JSF NamingContainer 分配固定 ID组件(例如表单),以防止 JSF 自动生成 ID。例如:
<h:form>
通过此设置,表单 ID 将固定为“formId”,而 inputText ID 将是“formId:emailAddress”,您现在可以直接在 Javascript 中使用。
更高级的技术涉及一起使用 #{component.clientId} 表达式与组件绑定。例如:
<h:inputText binding="#{emailAddress}" ... />
var input = document.getElementById('#{emailAddress.clientId}');
更新:
中提到的博客文章问题与 #{component} 引用直接相关,它引用计算 EL 表达式的当前组件。要获取组件的 ID,请使用以下语法:
var input = document.getElementById('#{component.clientId}');
另一种方法是将生成的 HTML DOM 元素作为“this”传递对函数的引用,允许您直接访问组件内的属性
<h:inputText onclick="show(this)" />
function show(input) { alert(input.value); }
jQuery 通过使用事件委托和样式类来抽象组件提供了更高级的选项。
<h:inputText styleClass="someMarkerClass" />
$(document).on("click", ".someMarkerClass", function() { var $input = $(this); alert($input.val()); });
以上是如何在 JavaScript 中访问 JSF 组件 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!