Ajax Onchange在foreach循环中

时间:2015-04-02 05:37:34

标签: php jquery ajax codeigniter

我有ajax功能

function price(id,prid,divid,key,name)
{  
        //alert(id); alert(prid); alert(name);
        $.ajax({
        type: "POST",
        data: "aid="+id+"&prid="+prid,
        url: '<?php echo base_url('grocery/onchange')?>',
        success: function(html){
        $('#'+divid).html(html);

        }
    });
}

我为选择框Onchange写了这个函数。

    foreach($some as $name) {
        <select class="form-control"  onchange="price(this.value,'<?php echo $prd->pr_id;?>','ajax<?php echo $key?>','<?php echo $key?>','<?php echo $prd->pr_name ?>')">
//options
</select>
    }

我的问题是我使用此函数更改div内容。但只有循环中的第一个值才会更改。其他人没有工作?这是因为函数在foreach循环中。如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

在你的foreach循环中,你没有为每个选择使用动态参数,尝试查看源代码并发现每个选择都有相同的参数尝试为每个选择传递动态参数。

答案 1 :(得分:0)

让我们以前面提到的方式做不同的事情。创建所有选择框如下:

foreach($some as $name) {
            <select class="form-control some_unique_class_name_that_not_used_in_css" data-prid ='<?php echo $prd->pr_id;?>' data-ajax ='ajax<?php echo $key?>' data-key = '<?php echo $key?>' data-name = '<?php echo $prd->pr_name ?>'
            >
             <option value="Some_Value0">Some_OPTION_name_0</option>
             <option value="Some_Value1">Some_OPTION_name_1</option>
             <option value="Some_Value2">Some_OPTION_name_2</option>
    </select>
    }

在&#34; data-any_param_name_to_use&#34;中设置必要的参数。属性,以便您可以在功能中访问它。   现在调用jqueries更改各个选择框的功能,类名如下:

$(function(){
    $(document).on('change', '.some_unique_class_name_that_not_used_in_css', function() {
       var divid = $(this).attr('data-ajax');
        $.ajax({
            type: "POST",
            data: "aid="+$(this).val()+"&prid="+$(this).attr('data-prid'),
            url: '<?php echo base_url('grocery/onchange')?>',
            success: function(html){
                $('#'+divid).html(html);
            }
        });
    });
  });

  // $(this).val() => selected value from the select box 
 // $(this).attr('data-prid') => whatever prid you have saved for the respective select box

希望这会对你有所帮助。