【问题标题】:Onchange not working in loopOnchange 不能循环工作
【发布时间】:2015-11-18 11:41:03
【问题描述】:

我正在使用 Laravel 4.2。我在foreach 声明中有表格:

@foreach($result as $key => $prices)
$endforeach

在这个 foreach 循环中,我有一个表单:

<div class="col-md-3 slide_content">
    <div class="form-group">
        <label for="">How many car?</label>
        <select class="form-control" name="number_of_car" id="car_no">
            <option value="" selected>select car numbers</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
        </select>
    </div>
</div>

<div class="col-md-3 slide_content">
    <div class="form-group">
        <label for="">Method to pay?</label>
        <select class="form-control" name="payment_method" id="ad_tt">
            <option value="">Select Type</option>
            <option value="1">Full Payment</option>
            <option value="2">Advance Payment</option>
        </select>
    </div>
</div>

这是我的 Javascript 代码:

$(document).ready(function(){
    $("#car_no").change(function(){
        var number_of_car = $("#car_no option:selected").val();
        var payment_type = $("#ad_tt option:selected").val();
        var amount = "<?php $ad = $prices->totalAmount; echo 'Rs: '.$ad; ?>"; alert(amount);
    });
});

我的问题是,当我更改第一个循环以外的行的选项值时,我只得到第一行的值。但是,我需要从相应的行中获取。那么,我怎么能使用 jquery 来做到这一点。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: jquery laravel onchange


    【解决方案1】:

    您必须使用 class 而不是 id,因为 id 在 DOM 中必须是唯一的。在这里,您将触发 id = car_no 的更改事件,您必须通过将迭代器值附加到 id 来使其唯一。

    $("#car_no").change(function() {} //should replace with 
    $(".car_no").change(function(){
    // use $(this).attr('data') to identify the element.
    }
    

    【讨论】:

    • 感谢您的回复。但是,当我发出警报时,它正在从最后一个循环语句中获取值。但是,我想从他们各自的循环中显示价值。
    • 我要显示的是选择不同循环的不同数量。任何帮助将不胜感激
    • @vijayrana,你看完我的回答了吗
    • @Satpal 是的,我已经完成了你的回答。但它实际上并不是我想要的。仅当我更改第一行的选择选项(第一个循环元素) 时,我才获得最后一个元素的数量值
    • $prices 是一个对象,其中包含从 api 接收的数组列表。其他作品完美,我只是卡在这里
    【解决方案2】:

    您不能将 id 用于多个元素。你必须使用类。

    <select class="form-control" name="number_of_car" class="car_no" >
    

    var number_of_car = $(this).val();
    

    同样获取另一个下拉列表的值。

    【讨论】:

      【解决方案3】:

      HTML 中的 ID 必须是唯一的。这是预期行为。可以使用通用类并使用关系来使用各种方法遍历 DOM。

      下面我使用car_noad_tt作为select元素的CSS类

      HTML

      <div class="col-md-3 slide_content">
          <div class="form-group">
              <label for="">How many car?</label>
              <select class="form-control car_no" name="number_of_car" data-amount="<?php $ad = $prices->totalAmount; echo 'Rs: '.$ad; ?>">
              </select>
          </div>
      </div>
      
      <div class="col-md-3 slide_content">
          <div class="form-group">
              <label for="">Method to pay?</label>
              <select class="form-control ad_tt" name="payment_method">
              </select>
          </div>
      </div>
      

      脚本

      $(document).ready(function(){
          $(".car_no").change(function(){
              var number_of_car = $(this).val();
              var payment_type = $(this).closest('.slide_content').next('.slide_content').find(".ad_tt" ).val();
      
              var amount = $(this).data("amount");
              alert(amount);
          });
      });
      

      【讨论】:

      • 是的,我已经完成了您的回答。但它实际上并不是我想要的。仅当我更改第一行的选择选项(第一个循环元素) 时,我才获得最后一个元素的数量值
      • @vijayrana,您使用的是amount = "&lt;?php $ad = $prices-&gt;totalAmount; echo 'Rs: '.$ad; ?&gt;"; ,所以您希望得到 amout 由 php 填充
      • 是的,它正在填充数量。最后循环金额的值为 Rs:38903。但是当我更改 First row(loop) 的选项时,我得到 Rs:38903。我应该得到 Rs:3117
      • 谢谢。它现在完美地工作。感谢您的帮助:)
      • 我需要在 div 部分显示结果。我怎么能那样做?这是我在循环内选择选项后的 div 部分。 `
      猜你喜欢
      • 2016-12-21
      • 2018-06-11
      • 1970-01-01
      • 2016-10-10
      • 2017-12-12
      • 2014-02-07
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多