【问题标题】:get id of hidden input field on select box change event在选择框更改事件上获取隐藏输入字段的 ID
【发布时间】: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();

标签: php jquery laravel


【解决方案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();
    • 我不是在问“怎么做”,我只是告诉你你有一个错误。
    猜你喜欢
    • 1970-01-01
    • 2019-08-16
    • 2012-09-16
    • 2014-11-26
    • 2021-03-31
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    相关资源
    最近更新 更多