2017-12-12 24 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 =" "

전달할 SQL 쿼리 reco 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(); 
     } 
    } 

은 모든 체크 박스를 선택 :

<input type="checkbox" class="select-all" name="payment[]" value= 
{$row.id_order}> 
<label> SELECT ALL</label> 
내가 루프 외부로 배치, 형태에 대한 모든 체크 박스는 SELECT를 만들 수 위의 코드를 사용하고 있었다

. 그것이 잘못되었다는 것을 이해하고 가치가 전달되지 않는 경우, 확인란을 어디에 두어야합니까?

모든 안내에 감사드립니다.

감사합니다.

+0

Jsfiddle 또는 codepen 예제를 추가 할 수 있다면 좋을 것입니다. – rach8garg

+0

코드를 업데이트했습니다. 나는 PHP 컨트롤러에서 레코드를 가져 와서 현명한 템플릿에 할당했다. 따라서 코드는 다음과 같습니다. {foreach from = $ payment item = row} maxlength = "50"value = {$ row.id_order}>
{/ foreach} 지금 나는 "모두 선택"하는 문제에 직면하고있다. – Enthu

답변

0

나는 select-all 값 문제를 생각하기 때문에이

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

에서 $row.id_order에 대한 초기화하지 않습니다하지만 당신은 다른를 사용해야합니다 {foreach from=$payment item=row}처럼 다음과 같은 자식 사용하지 않을 수 있습니다 $row.id_order의 값을 할당하는 경우 변수 식별자 다음 row. 당신이 loop.If 외부 $의 row.order_id를 할당 할 수 없습니다 잘못된 관행 작업

이 당신은 두 번째 양식을 위해 무엇이라도 $_POST['payment']을 수행 한 후 필요를 PHP에서 이러한 요소 값을 사용하지 싶어 $_POST['inprogress'] 반환합니다 원하는 값. 선택란을 선택하지 않으면 결과가 공백으로 반환됩니다. 이 배열 형식의 개체를 반환합니다 기억하십시오.

+0

네, 맞습니다. 나는 이것이 첫 번째 양식에 비어있는 것 같아서 값을 보낼 수 없다. 이로 인해 오류가 반환됩니다. 그래도 극복 할 수있는 방법이 있습니까? – Enthu

+0

네, 명백히 행 변수를'{foreach from = $ payment item = row_i} '와 같은 내부 요소에 대한 또 다른 변수로 변경해야합니다. –

+0

같은 경우에는 죄송합니다. 솔루션을 얻을 수 없지만 {foreach 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 버튼의 최종 목표는 무엇입니까? 두 양식 사이에 어떤 관계가 있습니까?

편집 :

출력 변수의 값을 참조하십시오.이 값을 수집하여 양식 제출과 함께 전달할 수 있습니다.

<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 체크 박스가 여러 개 생성됩니다. 나는 각 모양을 위해 하나를 필요로 할 것이다. SELECT ALL은 모든 레코드를 가져 와서 처리 할 컨트롤러에 제출합니다. 두 양식 간에는 아무런 관련이 없습니다. – Enthu

+0

먼저 SELECT ALL 체크 박스에서 {$ row.id_order}를 제거하십시오. 둘째,이 상자의 값을 제출하는 것으로 가정합니다. 배열 또는 개체 데이터 형식을 사용하고있는 것입니다. – rach8garg

+0

알았어, 나는 그동안 잘못하고있다. 값을 전달할 선택 상자는 어떻게 만듭니 까? – Enthu