【问题标题】:jQuery val() undefinedjQuery val() 未定义
【发布时间】:2011-03-03 14:02:32
【问题描述】:

我们有以下 XHTML 表:

  <tr class="encabezado">
    <th scope="col" width="2%">1</th>
    <th scope="col" width="2%">2</th>
    <th scope="col" width="2%">3</th>
    <th scope="col" width="2%">4</th>
    <th scope="col" width="2%">5</th>
    <th scope="col" width="2%">...</th>
    <th scope="col" width="2%">31</th>
  </tr>
  <tr>
    <th scope="row">Area 1<input name="line_config" type="hidden" value="0,5,50" /></th>
    <td class="gantt"> </td>
    <td class="gantt"> </td>
    <td class="gantt"> </td>
    <td class="gantt"> </td>
    <td class="gantt"> </td>
    <td class="gantt">...</td>
    <td class="gantt"> </td>
  </tr>
  <tr>
    <th scope="row">Area 2 <input name="line_config" type="hidden" value="0,0,10" /></th>
    <td class="gantt"> </td>
    <td class="gantt"> </td>
    <td class="gantt"> </td>
    <td class="gantt"> </td>
    <td class="gantt"> </td>
    <td class="gantt">...</td>
    <td class="gantt"> </td>
  </tr>

当点击 TD.gantt 元素时,我们希望 jQuery 从 input[name='line_config'] 标签中获取值。我们尝试下面的 jQuery 代码,但是 val() 返回了 'undefined':

$(document).ready(function() {
    function sum_day(tag, status, column) {
        var total_day = 0;
        var index_pos = 0;
        var values = 0;

        values = tag.closest('tr').children("input[name='line_config']").val();
        alert(values); //Return undefined

        return total_day;
    }

    $('td.gantt').click(function() {
        var gantt_tag = $('td.preop');

        $(this).toggleClass('preop');
        sum_day(gantt_tag, 'preop', $(this).index());
    });
});

我们的价值方式是否正确?如果有人可以帮助我们,我们将不胜感激... =)

【问题讨论】:

  • 您是否尝试获取与被点击的.gnatt 元素位于同一行的line_config 元素?
  • 是的。我使用 index() 来获取列并显示其他 TD 元素的结果。

标签: javascript jquery css jquery-selectors


【解决方案1】:

注意 jquery.children() 只会返回直接/直接子级,并且由于您的输入不是 &lt;TR&gt; 的直接/直接子级,因此您不会获得任何输入。

我可以建议这样的事情

$("input[name='line_config']", tag.closest('tr'))

【讨论】:

  • 我可以试试 closest("th[scope='row']").children("input[name='line_config']").val(); ?
  • @betacar 当然你可以试试。但为什么这么复杂?
【解决方案2】:

children 返回 tr 元素的直接子元素。您应该尝试通过 find 即:

values = tag.closest('tr').find("input[name='line_config']").val();

【讨论】:

    【解决方案3】:

    不确定这是否是整个问题,但是当您说var gantt_tag = $('td.preop'); 时,没有任何具有preop 类的元素:

    $('td.gantt').click(function() {
      var gantt_tag = $('td.preop');
      alert(gantt_tag.size()); // returns 0, i.e. no elements are matched
    });
    

    【讨论】:

      猜你喜欢
      • 2021-09-06
      • 2016-12-01
      • 2021-05-16
      • 1970-01-01
      • 2013-12-25
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多