2017-12-12 11 views
0

チェックボックスの値を渡すソリューションをオンラインでチェックしました"select all"私はページに複数のフォームを持っています。だから私は特定のフォームに基づいて値を渡すことを分離する必要があります。jQuery - 「すべてを選択」複数のフォームのチェックボックス

のjQuery:

$(document).ready(function() { 
$(".select-all").change(function() { 
    $(this).siblings().prop('checked', $(this).prop("checked")); 
    }); 
}) 

HTMLフォームの:**

<div class="col"> 
    <fieldset> 
      <form action="{$link->getLink('controller')|escape:'htmlall':'utf-8'}" method="post"> 
      <p> 
       {foreach from=$payment item=row} 
       <input type="checkbox" name="payment[]" maxlength="50" value={$row.id_order}> 
       <label> ID: <b>{$row.id_order}</b></label><br/> 
       {/foreach} 
       <br/> 
       <input id="submit" name="submitpayment" type="submit" value="PACK ITEMS" class="button" /> 
      </p> 
     </form> 
    </fieldset> 
</div> 

Error (Value is empty):

入力タイプ= "チェックボックス" クラス= "を選択し、すべての" 名前= "支払い[] "value =" "

recoに渡すSQLクエリRDS:

public function displayOrdersbyID() 
{ 
$query1 = new DbQuery(); 
$query1->select('o.id_order') 
->from('orders','o') 
->leftJoin('carrier','c','o.id_carrier=c.id_carrier') 
->leftJoin('order_state_lang','s','o.current_state=s.id_order_state') 
->where('c.name = ' . "'XXX'") 
->where('s.name = ' . "'Payment accepted'"); 
$payment = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query1); 
$this->context->smarty->assign('payment', $payment); 

コントローラー:

if (Tools::isSubmit('submitpayment')) { 
    $ids= Tools::getValue('payment'); 

    $query18 = new DbQuery(); 
    $query18->select('id_order_state') 
    ->from('order_state_lang') 
    ->where('name = ' . "'Processing in progress'"); 
    $updateinprogress = Db::getInstance()->getValue($query18); 

    foreach ($ids as $updateids) { 
      $objOrder = new Order($updateids); 
      $history = new OrderHistory(); 
      $history->id_order = (int)$objOrder->id; 
      $history->id_employee = $cookie->id_employee; 
      $history->changeIdOrderState($updateinprogress, (int)($objOrder->id)); 
      $history->add(true); 
      $history->save(); 
     } 
    } 

はALLチェックボックスを選択:

<input type="checkbox" class="select-all" name="payment[]" value= 
{$row.id_order}> 
<label> SELECT ALL</label> 
Iはループの外側に配置すること、フォームのためのすべてのチェックボックスSELECTを作成するために上記のコードを使用していた

。私はそれが間違っていることを理解し、価値は渡されていない、どこにチェックボックスを置くべきですか?

ご了承ください。

ありがとうございます。

+0

Jsfiddleまたはcodepenの例を追加するとよいでしょう。 – rach8garg

+0

コードを更新しました。私はPHPのコントローラからレコードを取得し、スマートなテンプレートに割り当てられています。したがって、コードは次のようになります。{foreach from = $ payment item = row} maxlength = "50" value = {$ row.id_order}>
{/ foreachの}。ちょうど私は現在「select all」の問題に直面しています。 – Enthu

答えて

0

私は

<input type="checkbox" class="select-all" name="inprogress[]" value={$row.id_order}> 

$row.id_orderためそこには初期のでselect-all値で問題を考えるしかし、あなたは$row.id_orderの値を割り当てると{foreach from=$payment item=row}は別のものを使用しなければならないようにし、次の子に使用されていない可能性があります可変識別子ならrowです。

あなたはその後、第二の形式と$_POST['inprogress']ため$_POST['payment']に何もする必要は返されませんあなたがPHPでこれらの要素の値を使用したいがloop.If外の$ row.order_idを割り当てることはできません間違った練習での作業あなたが望む価値 チェックボックスを選択しない場合、結果は空白になります。 これは配列型のオブジェクトを返すことに注意してください。

+0

はい、正確です。私はそれが最初のフォームのために空であり、値を送ることができない理由だと信じています。これによりエラーが返されます。しかし、克服する方法はありますか?私はあなたの解決策を得ることはありませんが、私は{foreachのを変更することができない場合 – Enthu

+0

はいどうやらあなたは申し訳ありませんが、同じ –

+0

のために、 '{= $支払項目からのforeach = row_i}'または何か他のもののような内部要素のために別の変数に行変数を変更する必要がありますfrom = $ payment item = row}これはもう動作しません。値は{$ row_i.id_order} – Enthu

0

<input type="checkbox" class="select-all" name="inprogress[]" value={$row.id_order}> 

は、ループの外側にあります。したがって、{$row.id_order}という値はテンプレートには定義されません。コンパイルされた値についてDOMツリーをチェックします。

SELECT ALLボタンの最終目標は何ですか? 2つの形式の間に関係はありますか?

編集:

出力変数の値を参照してください。この値を収集し、フォーム提出とともに渡すことができます。

<div class="col"> 
    <fieldset> 
      <form> 
      <p> 
       <input type="checkbox" class="select-all" name="payment[]" value="22"> 
       <label> SELECT ALL</label> 
       <br/><br/> 
       <input type="checkbox" name="payment[]" maxlength="50" value="a"> 
       <label> ID: <b>A</b></label><br/> 
       <input type="checkbox" name="payment[]" maxlength="50" value="b"> 
       <label> ID: <b>B</b></label><br/> 
       <input id="submit" name="submitinprogress" type="submit" value="PACK ITEMS" class="button" /> 
      </p> 
     </form> 
    </fieldset> 
</div> 

$(document).ready(function() { 
    $(".select-all").change(function() { 
     $(this).siblings().prop('checked', $(this).prop("checked")); 
     let inputs = $(this).siblings("input[type=checkbox]"); 
     let output = []; 
     for(let i = 0; i < inputs.length; i++){ 
      output.push(inputs[i].value); 
     }; 
     console.log(output); // ["a", "b"] 
    }); 
}); 
+0

ループの中に置くと、複数のSELECT ALLチェックボックスが作成されます。私は各フォームのために1つ必要です。 SELECT ALLはすべてのレコードを取り込み、処理するコントローラーに送信します。 2つの形式の間には関係がありません。 – Enthu

+0

まず、SELECT ALLチェックボックスから{$ row.id_order}を削除します。第二に、私はこれらのボックスの値を提出するために、配列かオブジェクトデータ型のどちらかを使用していると思います。 – rach8garg

+0

申し訳ありませんが、私はずっと間違っています。どのように値を渡す選択ボックスを作成するのですか? – Enthu

関連する問題