【问题标题】:jQuery pass input value based on table rowjQuery根据表格行传递输入值
【发布时间】:2012-09-01 14:08:51
【问题描述】:

我对 jquery 知之甚少,所以如果我没有多大意义,请见谅。

我有一个表,它的行是从 php db 查询中填充的(行数会有所不同),在这种情况下有两行数据。这是php生成的html表的一部分。

<table border=1 width=800px id=workout>
 <tr>
 <th width=300px id=clients>Client</th>
 <th width=200px id=movements>Movements</th>
 <th>X Completed</th>
 </tr>

<tr>
<td><input type="hidden" name="client_id[]" class="clientval" value="1"></td>   
<td>
<select name="movement[]" width=200 class='typeval' onchange='changeMovement()'>
              <option value="select">Select...</option>
              <option>Key Movement</option>
              <option>Movement -1</option>
              <option selected="selected" >Movement -2</option>
              <option>Movement -3</option>
              <option>Movement -4</option>
        </select>
</td>
<td><label id="count"></label></td>
</tr>

<tr>
<td><input type="hidden" name="client_id[]" class="clientval" value="8">
<td>
<select name="movement[]" width=200 class='typeval' onchange='changeMovement()'>
              <option value="select">Select...</option>
              <option>Key Movement</option>
              <option>Movement -1</option>
              <option selected="selected" >Movement -2</option>
              <option>Movement -3</option>
              <option>Movement -4</option>
        </select>
</td>
<td><label id="count"></label></td>
</tr>

我将movementclient_id 的值传递给POST jquery,这样我就可以对数据运行php 查询并返回结果。如何根据选择菜单所在的行传递所选移动的值和 client_id。

例如:如果用户更改第二行的移动下拉菜单,我想将 client_idselected&gt;Movement&lt; 发送到 jQuery 函数。现在它只是获取我表的第一行,仅此而已。

这是我编辑的 jQuery:

已编辑:

<script type="text/javascript">

var typeval,clientval, class_id;
$('.typeval').on('change', function(){
    movement =  $(".typeval option:selected").val();
    client_id = $(this).parents('tr').find('input.clientval').val();
    class_id = $(<? echo $class_id; ?>).val();

    //console.log($(this).parents('tr').find('input.clientval').val(), $(this).val());
    $.ajax(
    { url: "movement_count.php",
      type: "post",
      data: {typeval:typeval, client_id: clientval, class_id :},
      dataType: "json",
      });

    success: (function(output) {
    alert(output);
    $(".count").html(output);
    })
 });

</script>   

【问题讨论】:

  • 可以将输入隐藏添加到同​​一个表数据中。然后按照 this.parent().find(".class") 的方式做一些事情
  • 另外,为什么将数据设置为字符串而不是对象? { 运动:运动,client_id:client_id,class_id:class_id }
  • 如果将数据保留为字符串,则需要在变量之间添加“&”:“movement="+movement+"&client_id="+client_id+"&class_ID"...

标签: php javascript jquery ajax


【解决方案1】:

由于您使用的是 jQuery,我会这样做。移除内联 JavaScript 并绑定到 select 元素的 change 事件。

var typeval,clientval;
$('select.typeval').change(function() {
    //console.log($(this).parents('tr').find('input').val(), $(this).val());
    typeval =  $(this).val();
    clientval = $(this).parents('tr').find('input').val();
});​
  • $(this).parents('tr').find('input').val(); //会给你 client_id
  • $(this).val(); // 会给你选择项的值

然后您可以将这些值放入您的 AJAX 调用中。

jsFiddle example

【讨论】:

  • 表中还有其他隐藏的input 仍然有效,或者我是否需要仅针对包含client_id 的输入?
  • 您可以将其修改为$(this).parents('tr').find('input.clientval').val(),这应该会选择您需要的那个。这将在您单击的同一行中获得隐藏的输入。如果每一行中有多个隐藏输入字段具有该类,请告诉我。
  • 我在上面发布了我编辑的 jQuery。我没有收到typeval 未定义错误。我做错了什么?
  • 哦,您刚刚将我的示例粘贴到您的代码中,该代码不会分配任何变量。您要做的是创建一对全局变量并在我在答案中发布的代码中更改它们(console.log 仅用于开发)。然后在您拥有typeval:typeval, client_id:clientval 的AJAX 调用中,使用全局变量。我会稍微更新一下答案中的代码。
  • function changeMovement 现在消失了吗?
【解决方案2】:

好吧,你需要做以下事情:

1.删除所有onchange='changeMovement()',您将不再需要它们。

2.只是echo 来自PHP 的class_id

3. 修正获取client_id 的方式,如下所示。

代码:

$(document).ready(function() {

    $('.typeval').change(function() {
        var movement = $(this).val();
        var client_id = $(this).parent().siblings().find('.clientval').val();
        var class_id = <?php echo $class_id; ?>;

        /* Do your AJAX call here */
    });

});​​​​​​​​​​​​

【讨论】:

    【解决方案3】:

    使用 php 为您的选择和输入元素提供一个唯一的 ID。比如:

    <input type="hidden" id="client_id$client_id" ...
    
    <select name="movement[]" id="mov$client_id" ...
    

    然后在您的 javascript 函数中使用 php 来包含 client_id,如下所示:

    changeMovement(client_id)
    

    然后您可以使用 client_id 来更改任何对应的移动,如下所示:

    var client = $("#client_id"+client_id).val();
    var movement = $("#mov"+client_id).val();
    

    对于唯一 ID,您可能希望使用填充每行隐藏输入值字段的任何变量。我在不知道这些数字的确切来源的情况下这么说。

    【讨论】:

      【解决方案4】:

      使用 James 的解决方案,它看起来像这样:

      那么 jquery 看起来像这样:

      var 运动 = this.value var client_id = this.parent().find(".clientval")

      【讨论】:

        【解决方案5】:

        检查这个工作示例.. http://jsfiddle.net/sushanth009/BZ5Wt/

        使用此行可以获取选中行的ClientId..

        var client = $(this).parent().parent().find('.clientval').val();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-01-29
          • 2018-12-01
          • 2019-05-31
          • 2020-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多