2013-03-19 2 views
1

Я не уверен, что я делаю это совершенно неправильно, но я надеюсь, что то, что я пытаюсь сделать, возможно.

У меня есть функция ajax jquery, которая сохраняет флажки «selected» у пользователя и сохраняет их в $ _SESSION ['order_items'] [index] ['cheeseids'] []; Когда пользователь напомнит этот «элемент», я бы хотел, чтобы те же флажки «были выбраны», как и раньше. Смотрите пример ниже:

[order_items] => Array 
    (
     [1] => Array 
      (
       [cheeseids] => Array 
        (
         [0] => 1 
         [1] => 2 
         [2] => 4 
        ) 

Мои «Изменение/восстановление» функция JQuery использует следующие переменные, чтобы получить номер индекса:

var productIDValSplitter = (this.id).split("_"); 
var productIDVal  = productIDValSplitter[1]; 

Функция я пытаюсь использовать, чтобы «повторно выбрать» ящики 1, 2, 4 (из массива сыров) не работают (он находится внутри моей функции jQuery). Это на самом деле вызывает весь код JQuery не работает:

<?php 
foreach($_SESSION['order_items'] as $key => $value) 
{ 
?> 

var idnum = <?php echo $value['<script type="text/javascript">productIDVal</script>']['cheeseids'] ?>; 
$("div.cheesebox input[type=checkbox]").eq(" + idnum + ").attr("checked", "checked"); 

<?php 
} 
?> 

JS Выход:

var idnum = ; 
$("div.cheesebox input[type=checkbox]").eq(" + idnum + ").attr("checked", "checked"); 

var idnum = ; 
$("div.cheesebox input[type=checkbox]").eq(" + idnum + ").attr("checked", "checked"); 

Вся функция JS/JQuery, что я добавляю в PHP тоже:

$("#basketItemsWrap li img.change").live("click", function(event) { 
     var productIDValSplitter = (this.id).split("_"); 
     var productIDVal  = productIDValSplitter[1]; 
     $("#notificationsLoader").show(); 
     $.ajax({ 
     type: "POST", 
     url: "includes/ajax/functions.php", 
     data: { productID: productIDVal, action: "deleteFromBasket"}, 
     success: function(theResponse) { 
      $("div#order_qty input").attr('value', $("#order_" + productIDVal + " #order_qty").text()); 
      $("div#order_listprice input#price1").attr('value', $("#order_" + productIDVal + " #order_listprice").text().replace("$", "")); 
      $("div#order_price input#discprice1").attr('value', $("#order_" + productIDVal + " #order_price").text().replace("$", "")); 
      $("div#order_price input#itemprice1").attr('value', $("#order_" + productIDVal + " #order_itemprice").text().replace("$", "")); 


      //The following functions restore the order details in the select menus, checkboxes, and radio buttons 
      //Restores the item selected 
      for(var i = 0; i < $("#item1 option").size(); i++) 
      { 
      if($("#order_" + productIDVal + " #order_item").text() == $("#item1 option:eq("+i+")").text()) 
      { 
       $("#item1 option:eq("+i+")").attr("selected", "selected"); 
       //$("#item1").val(i); 
       CalcPrice(1); 
      } 
      } 

      //Restores the promotion selected 
      for(var i = 0; i < $("#promo1 option").size(); i++) 
      { 
      if($("#order_" + productIDVal + " #order_promo").text() == $("#promo1 option:eq("+i+")").text()) 
      { 
       $("#promo1 option:eq("+i+")").attr("selected", "selected"); 
       //$("#promo1").val(i); 
       CalcPromo(1); 
      } 
      } 

      <?php foreach($_SESSION['order_items'][1]['cheeseids'] as $id): ?> 
      $("div.cheesebox input[type=checkbox]#<?php echo $id;?>").attr("checked", "checked"); 
      <?php endforeach; ?> 
      //Restores the cheese options selected 



      // $('div.cheesebox input[type=checkbox]').size(); i++) 

      //$('div.cheesebox input[type=checkbox]').eq(1).attr('checked', 'checked'); 


      $("#order_" + productIDVal).hide("slow", function() {$(this).remove();Calc();}); 
      $("#notificationsLoader").hide(); 
     } 
     }); 
     }); 

PHP/HTML для генерации флажков:

<?php 
     //Display all "cheese" options in a checkbox group 
      foreach($_SESSION['ingr_cheese'] as $key => $value) 
      { 
       echo "<div class=\"cheesebox\" style=\"float:left; width:175px; margin-bottom:7px;\">"; 
       echo "<input type=\"checkbox\" name=\"cheese1\" id=\"cheese1\" class=\"cheeseCheck\" value=\"".$key."\">&nbsp;<label for=\"cheese1\">".$value['cheese']."</label></br>"; 
       echo "</div>"; 
      } 
     ?> 
+0

Похоже, у вас есть синтаксическая ошибка. Можете ли вы включить js, который выводится из 'foreach' в вашем последнем блоке кода? –

+0

Просто отправил его оригиналу. Это синтаксическая ошибка. Я не знаю, как правильно форматировать jq и php для совместной работы. – XanderNGCC

+0

Спасибо, и, конечно же, это некорректный javascript. Теперь я отвечу качели. –

ответ

0

Если массив, который вы указали, уже является точным представлением того, что находится в массиве $_SESSION, тогда этот код должен делать то, что вы ищете.

<?php foreach($_SESSION['order_items'][1]['cheeseids'] as $id): ?> 
    $("div.cheesebox input[type=checkbox]#<?php echo $id;?>").attr("checked", "checked"); 
<?php endfor; ?> 

Это должно генерировать JavaScript, который выглядит следующим образом:

$("div.cheesebox input[type=checkbox]#1").attr("checked", "checked"); 
    $("div.cheesebox input[type=checkbox]#2").attr("checked", "checked"); 
    $("div.cheesebox input[type=checkbox]#4").attr("checked", "checked"); 

Этот код предполагает разметку для Флажки выглядит (несколько), как это:

<div class=".cheesebox"> 
    <input type="checkbox" id="1"> 
    <input type="checkbox" id="2"> 
    <input type="checkbox" id="3"> 
    <input type="checkbox" id="4"> 
</div> 

Я проверил синтаксис селекторов , но если это не сработает, я, вероятно, сделал плохое предположение о разметке ваших флажков. Вставьте еще немного своего html, если этого недостаточно, чтобы указать вам в правильном направлении, и я возьму еще раз.

+0

Когда я помещаю этот PHP-код в мою функцию jQuery, он больше не работает. Мне нужно отделить php от js? Я добавлю всю функцию в свой исходный пост за секунду. – XanderNGCC

+0

Кроме того, как мне определить значение индекса $ _SESSION ['order_items'] [1] ['cheeseids'] для «1» в качестве javascript var (productIDval? Example: $ _SESSION ['order_items] [productIDVal] [' cheeseids ']? – XanderNGCC

+0

Мне интересно, не будет ли это на самом деле работать ... потому что вызов js для изменения цикла foreach будет после вызова сервера. Возможно, мне нужно сохранить каждое значение «сыра» в массиве javascript и Процитировать через этот массив? Другие функции, которые напоминают выпадающие меню в одной и той же функции, делают это. Однако я не уверен, как прокручивать массив js, как петлю php «foreach». – XanderNGCC

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