jQuery从相邻TD获取输入名称数组键值


jQuery Get Input Name Array Key Value from Neighbouring TD

标题中很难解释,但一些代码说明了一切:

<tr class="">
  <td>
    <input value="9" name="set[122][order]"></input>
    <input class="set-id" type="hidden" value="1" name="set[122][ex_id]"></input>
  </td>
  <td>
    <input value="0.00" name="set[122][weight]"></input>
  </td>
  <td> … </td>
  <td>
    <img class="deleteRowButton" border="0" title="Toggle Delete Set" alt="Delete Set" src="mysite/images/icons/png/delete-3x.png"></img>
  </td>
</tr>

我有一些jQuery代码,当点击img(deleteRowButton)时就会激活:

$('.deleteRowButton').click (function() {
  $(this).parents("tr").toggleClass( "deleteSet" );
  var id = $('.set-id', $(this).closest('td')).val(); // this bit not working
  $('.editWoForm').append('<input type="hidden" name="deleteSet[]" value="' + id + '" />');
});

deleteRowButton代码基本上只是在表单的底部插入一个隐藏的输入标记,所以我可以处理这些标记来从数据库中删除条目。

但是,我需要做的是从set[]中获取值,因此在本例中为122。它可以来自任何输入,因为整个tr与一个条目相关。122是数据库id,所以这就是我需要获取的。

因此,理想情况下,当用户单击deleteRowButton时,它会生成并插入:

<input type="hidden" name="deleteSet[]" value="122" />

提前感谢!


解决方案

感谢@ArunPJohny的协助。

$('.deleteRowButton').click (function() {
  var $tr = $(this).parents("tr").toggleClass( "deleteSet" );
  var id = $tr.find('.set-id').attr('name').match(/'d+/)[0];
  if($tr.hasClass( "deleteSet" )){
    $('.editWoForm').append('<input type="hidden" name="deleteSet[]" value="' + id + '" />');
  }
  else{
    $('input[name="deleteSet[]"][value="' + id + '"]').remove();
  }
});

这将获得id,附加一个隐藏的输入字段,并将所述id作为值,然后如果再次按下按钮(切换删除状态),则隐藏的输入域将被删除。

这里的一种方法是对当前tr元素中的set-id元素进行微调。您要做的是在包含单击的deleteRowButtontd中找到一个set-id

$('.deleteRowButton').click(function() {
  //use closest instead of parents
  var $tr = $(this).closest("tr").toggleClass("deleteSet");
  //find the set-id within the current tr
  var id = $tr.find('.set-id').attr('name').match(/'d+/)[0];
  //$('.editWoForm').append('<input type="hidden" name="deleteSet[]" value="' + id + '" />');
  $('#log').text(id)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
  <tr class="">
    <td>
      <input value="9" name="set[122][order]"/>
      <input class="set-id" type="hidden" value="1" name="set[122][ex_id]"/>
    </td>
    <td>
      <input value="0.00" name="set[122][weight]"/>
    </td>
    <td> … </td>
    <td>
      <img class="deleteRowButton" border="0" title="Toggle Delete Set" alt="Delete Set" src="mysite/images/icons/png/delete-3x.png"/>
    </td>
  </tr>
  <tr class="">
    <td>
      <input value="9" name="set[123][order]"/>
      <input class="set-id" type="hidden" value="2" name="set[123][ex_id]"/>
    </td>
    <td>
      <input value="0.00" name="set[123][weight]"/>
    </td>
    <td> … </td>
    <td>
      <img class="deleteRowButton" border="0" title="Toggle Delete Set" alt="Delete Set" src="mysite/images/icons/png/delete-3x.png"/>
    </td>
  </tr>
</table>
<div id="log"></div>