在选择框更改事件上获取隐藏输入字段的 ID

Posted

技术标签:

【中文标题】在选择框更改事件上获取隐藏输入字段的 ID【英文标题】:get id of hidden input field on select box change event 【发布时间】:2018-10-05 13:00:12 【问题描述】:

我有一个动态表,其中的行数据使用 foreach 方法显示。 我想在更改选择框选项时获取隐藏输入字段的值。 这是我的代码,

@foreach($sCForms as $sCForm)
 <tr>
    <td>!! $sCForm->Description !!</td>
    <td style="display: none;"><input type="hidden" class="hidden" 
        value="$sCForm->id" id="hidden"></td>
    <td class="demo">
       <select name="assigned_to" id="assigned_to" class="demo form-control 
         required" style="width: 90%;" onchange="changeassigned()">
            <option value="">--Select user--</option>
              @foreach($users as $user)
                  <option value="$user->id">
                      $user->first_name $user->last_name
                  </option>
              @endforeach
        </select>
    </td>
</tr>
@endforeach

我的功能:

 function changeassigned()
   
       var id = $('#assigned_to').val();
       var form_id = $('.demo').parent().parent().find('input').val();
       alert(form_id);
   

我对这段代码的问题是我只得到第一行隐藏字段的值。

获取每行隐藏字段值的最佳方法是什么?

【问题讨论】:

除非你 foreach 只返回 1 个循环,否则你将拥有多个具有相同 ID 的元素,这是不行的。 ID 应该始终是唯一的。第二次尝试使用changeassigned(this) 然后function changeassigned(obj) var id = $(obj).val(); 【参考方案1】:

我将永远是独一无二的,这应该为您提供您想要的结果:

function changeassigned(obj) 
  var id = $(obj).val();
  var form_id = $(obj).closest("tr").find('input').val();
  alert(form_id);

演示

function changeassigned(obj) 
  var id = $(obj).val();
  var form_id = $(obj).closest("tr").find('input').val();
  alert(id + " | " + form_id);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tbody>
    <tr>
      <td>My Form</td>
      <td style="display: none;"><input type="hidden" class="hidden" value="FormID" id="hidden"></td>
      <td class="demo">
        <select name="assigned_to" class="demo form-control 
         required" style="width: 90%;" onchange="changeassigned(this)">
          <option value="">--Select user--</option>

          <option value="user1">
            user1
          </option>
          <option value="user2">
            user2
          </option>
        </select>
      </td>
    </tr>
    <tr>
      <td>My Form2</td>
      <td style="display: none;"><input type="hidden" class="hidden" value="FormID2" id="hidden"></td>
      <td class="demo">
        <select name="assigned_to" class="demo form-control 
         required" style="width: 90%;" onchange="changeassigned(this)">
          <option value="">--Select user--</option>

          <option value="user3">
            user3
          </option>
          <option value="user4">
            user4
          </option>
        </select>
      </td>
    </tr>
  </tbody>
</table>

【讨论】:

【参考方案2】:

看起来你会得到具有相同 "id" 的元素。将其更改为 class 或其他内容 =)

您可以将“this”传递给更改分配的函数以获取选择器的起点

【讨论】:

这与我的评论有何不同? same.. 也在同一时间 我比你早 2 分钟写了我的评论。 拿个饼干)) 它是关于向OP提供相关信息和答案,但无需提供多个基本相同的答案/cmets。我刚刚澄清你说我们同时写的,wish 基本上是不正确的。【参考方案3】:
Try Like this - using variable i, create dynamic id of hidden and select

 $i=0 
@foreach($sCForms as $sCForm)
 <tr>
    <td>!! $sCForm->Description !!</td>
    <td style="display: none;"><input type="hidden" class="hidden" 
        value="$sCForm->id" id="hidden $i "></td>
    <td class="demo">
       <select name="assigned_to" id="assigned_to $i " class="demo form-control 
         required" style="width: 90%;" onchange="changeassigned( $i )">
            <option value="">--Select user--</option>
              @foreach($users as $user)
                  <option value="$user->id">
                      $user->first_name $user->last_name
                  </option>
              @endforeach
        </select>
    </td>
     $i++ 
</tr>
@endforeach


function changeassigned(i)

   var id = $('#assigned_to'+i).val();
   var form_id = $('#hidden'+i).val();
   alert(form_id);

【讨论】:

你还在复制身份证!! 我忘了,请声明“$i = 0” 不,您仍在复制id="assigned_to",同样适用于您的 jquery 函数。 id="assigned_to $i " 那么您应该动态更改选择标签ID,然后尝试一下。可以解决,在你的 js 中也改变 var id = $('#assigned_to'+i).val();而不是 var id = $('#assigned_to').val(); 我不是在问“怎么做”,我只是告诉你你有一个错误。

以上是关于在选择框更改事件上获取隐藏输入字段的 ID的主要内容,如果未能解决你的问题,请参考以下文章

使用多值控制源隐藏组合框中的值

点击/单击选择输入/文本框字段的内容

获取选择值列表作为隐藏字段中分隔的管道并提交

无法在选择框更改时触发事件

下拉框选择blur与click冲突问题

jsp页面隐藏显示输入框后输入框对不齐,求指点!