【问题标题】:Finding elements id in a JSF dataTable via JQuery通过 JQuery 在 JSF 数据表中查找元素 id
【发布时间】:2013-03-05 03:50:35
【问题描述】:

这是我的 jsf 表:

<h:dataTable value="myBean.rows" var="b">
    <h:column>
    <div class="slider-range-min">                               
        <h:inputHidden id="buildingId" value="#{b.buildingId}" />
        <h:inputHidden id="amount" value="#{b.amount}" />
    </div>
   </h:column>
</h:dataTable>

现在,可以说,我可以通过 jQuery 在 JavaScript 中访问上面的“div”:

$(this).

我可以通过这种方式访问​​第一个 inputHidden 值:$(this).children[0].innerHTML,但我的目标是 通过id(buildingId) 获取这个hiddenInput 字段,因为这些hiddenInputs 的顺序可以改变,所以通过children[0] 访问可能不再有效。如何做到这一点?

(13:52:12 16.03.2013)

嗯,您的任何解决方案都不起作用。这是我的 JavaScript 代码:

 $(function() {
            $( ".slider-range-min" ).slider({
              range: "min",
              value: 37,
              min: 0,
              max: 700,
              stop: function( event, ui ) {
                  var buildingId = $(this).find('#buildingId').val();

                  console.log(buildingId);

如您所见,每个 div 都是一个 JQuery UI 滑块。控制台打印“未定义”。 在 html 文档中,此表中的这些输入之一显示为 id:“foodTableForm:foodTable:0:buildingId”。 因此,如您所见,这些 id 因表而被修改。

【问题讨论】:

  • 为什么不$('#buildingId').html() ?您的问题可能有点不清楚。
  • 您想找到inputid,还是使用id找到input?跨度>
  • 我无法以你的方式得到它,因为这些 inputHidden 元素在表格中,所以在 HTML 源代码中,不会有带有 'buildingId' id 的元素。
  • 我可以通过 $(this) 访问表中的特定 div。现在,我想在这个 div 中找到带有“buildingId”的元素。它不能用$('#buildingId')来完成,因为这是一个表,所以会在html文档的id后面附加一些东西。可以使用 $(this).children[0] 来完成,但这不是完整的解决方案,因为这些输入将来可能会发生变化。

标签: javascript jquery jsf


【解决方案1】:
$(this).find('#buildingId').val()  // #{b.buildingId}

【讨论】:

  • 不,这只有在有多个具有此 id 的元素时才有意义,这将是非法的。
  • 没有完美的代码。我同意这是非法的,但它会起作用。
  • @makedon:“这是非法的,但它会起作用”真的不是要采取的态度。如果它违反规范,它不应该完成,无论它是否有效。
【解决方案2】:

根据this answer,如果h:inputHidden被多次使用,实际的HTML将如下所示:

<input type="hidden" id="form:0:hidden" name="nameofyourform:uniquenumber:buildingId" value="value" />

假设 this 是对 div 的引用,您应该能够做以下两件事之一:

var buildingId = $(this).find("input[name*='buildingId']").val();

*= 是“contains”选择器。另一种选择是查看源代码并弄清楚命名的工作原理。如果唯一 id 在某种程度上等同于表中的行索引,您可以找到表的行索引并构建您的 id:

var rowId = $(this).closest('tr').index(); // add or subtract if the id of the field is off by a certain number...

var buildingId = $("#yourform:" + rowId + ":buildingId").val();

【讨论】:

  • @scott 呈现的 id 不会是 buildingId 并且是唯一的。
  • 根据对 h:inputHidden 的少量研究进行编辑。 :)
  • 感谢您的回答,但我已经使用了@zeroflag 的解决方案,但希望您以这种方式查找 id 的解决方案能够奏效:)。
【解决方案3】:

您可能不知道生成的 id,但您知道它以 buildingId 结尾(至少应该如此)。

因此,当您可以通过 $(this) 访问 div 时,您可以使用 $(this).find("[id$='buildingId']") 获取值,其中 $ 表示“以”结尾。

也许您必须将id 替换为name

【讨论】:

  • 谢谢 zeroflagL,完美运行!感谢您提供像 stackoverflow 这样很棒的论坛,用户可以在几秒钟内回答:)。
  • 感谢您提出这么棒的问题;)
猜你喜欢
  • 2013-09-15
  • 2016-05-30
  • 2014-03-12
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 2019-10-11
相关资源
最近更新 更多