通过JQuery在JSF dataTable中查找元素id

时间:2013-03-16 12:25:35

标签: javascript jquery jsf

这是我的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>

现在,让我们说,我在JavaScript中通过jQuery访问上面的'div':

$(this).

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

(2013年3月16日13:52:12)

嗯,没有你的解决方案不起作用。这是我的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滑块。控制台打印'undefined'。 在html文档中,此表中的其中一个输入显示为 id:“foodTableForm:foodTable:0:buildingId”。 所以,正如你所看到的,这些id因为表而被修改。

3 个答案:

答案 0 :(得分:0)

根据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();

答案 1 :(得分:0)

$(this).find('#buildingId').val()  // #{b.buildingId}

答案 2 :(得分:0)

您可能不知道生成的ID,但您知道它以 buildingId 结束(至少应该这样)。

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

也许您必须将id替换为name