2015-04-02 2 views
2

У меня есть функция АяксаAjax OnChange Внутри Еогеасп петля

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 с помощью этой function.But только первое значение из цикла только изменения. другие не работали? Это потому, что функция находится в петле foreach. Как решить это?

+0

PLease предоставляет полный код выбора с параметрами и структурой div. –

+0

Где находится '$ ('#' + div) .html (html);' в вашем HTML? Пожалуйста, предоставьте полный код. –

+0

Если вы делаете запрос ajax в таком цикле (как правило, плохая идея), вам нужно сделать их «синхронными» по умолчанию, они «асинхронны». Однако установка 'async => false' - это плохой ход! Вам нужно будет изучить методы «Отложенные», так как их одновременное вызов синхронно может заблокировать поток. – Philip

ответ

0

В вашем цикле foreach вы не используете динамические параметры для каждого выбора, попробуйте просмотреть исходный код и узнайте, что каждый из них имеет одни и те же параметры, которые пытаются передать динамический параметр для каждого выбора.

+0

Вот почему я передаю 5 различных параметров. Но такая же проблема? –

+0

Ваш вопрос должен содержать ваш полный код. Где '$ ('#' + div) .html (html);' в HTML или коде? –

+0

это в codeigniter, я меняю div –

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> 
    } 

Установите необходимые параметры в «данных-any_param_name_to_use» атрибуты, так что вы можете получить доступ к нему в функции. Позовите 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 

Надеется, что это поможет.

+0

Где вы собираетесь назначить '$ ('#' + div) .html (html);' в HTML-коде? –

+0

Спасибо за ваш ответ. Я заменяю ваш код. но он работает так же :( –

+0

вы можете показать здесь, что вы изменили? –

Смежные вопросы