JavaScript массив объектов вставка нового и консольного журнала - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь создать массив динамических c объектов (например, ключ: значение). Я хочу вставить каждый ключ (имя класса, на котором щелкнули) и значение (количество проверенных). Я написал console.log, чтобы получить значение из массива в PHP. Проблема в том, что он не вставит новый объект таким образом.

var countChecked = function() {
    var checked = {};

    var n = $( '.'+ this.className + ':checked' ).length;
    checked.push({'this.className',n});
    console.log(checked);
    alert( n + (n === 1 ? " is" : " are") + " checked!" );
};

countChecked();
$( "input[type=checkbox]" ).on( "click", countChecked );

1 Ответ

0 голосов
/ 18 июня 2020

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

let checkedArr = []; // initialize the variable(type = array) to global scope.

function b(e) { // called every time a the checkbox is clicked

  let totalChecked = 0; // initialize the variable with 0;

  $("input[type=checkbox]." + e).each(function() { // check every checkbox with class e(e has className)

    //console.log($(this));
    if ($(this).is(":checked")) { // check if checkboxed is checked

      totalChecked++; // increment every time

    }
  });

  // find if class already exists -- returns the index of matched element and -1 for no match
  let existIndex = checkedArr.findIndex((item) => item.class == e);

  console.clear();
  // console.log(existIndex);

  if (existIndex != -1) { // if class exists in array, update its value

    checkedArr[existIndex].checked = totalChecked;

  } else { // if not insert the value as an object

    checkedArr.push( {class: e, checked: totalChecked} );
  
  }
  
  $('.some_class').val(JSON.stringify(checkedArr)); // convert it to string and assign it to the input field 
  
  alert($('.some_class').val());
  console.log(checkedArr);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input onchange="b(this.className)" class="kaka" type="checkbox" name="worker_name[]" value="kaka1" />kaka1
<input onchange="b(this.className)" class="kaka" type="checkbox" name="worker_name[]" value="kaka2" />kaka2
<input onchange="b(this.className)" class="kaka" type="checkbox" name="worker_name[]" value="kaka3" />kaka3
&emsp;&emsp;

<input onchange="b(this.className)" class="lala" type="checkbox" name="worker_name[]" value="lala1" />lala1
<input onchange="b(this.className)" class="lala" type="checkbox" name="worker_name[]" value="lala2" />lala2
&emsp;&emsp;

<input onchange="b(this.className)" class="jaja" type="checkbox" name="worker_name[]" value="jaja1" />jaja1
<input onchange="b(this.className)" class="jaja" type="checkbox" name="worker_name[]" value="jaja2" />jaja2

<!-- Make this ↓↓ hidden -- here only for demo -->
<input type="text" name="hidden_field" class="some_class" value="" />

Теперь, как вы можете видеть, поле ввода имеет значение checkeArr. Затем в вашем controller вы можете получить значение как -

$hidden = $this->input->post('hidden_field'); // name of your hidden field
$hidden = json_decode($hidden); // convert it back to its original form

print_r($hidden);

Output :

Array
(
    [0] => stdClass Object
        (
            [class] => kaka
            [checked] => 1
        )

    [1] => stdClass Object
        (
            [class] => lala
            [checked] => 1
        )

    [2] => stdClass Object
        (
            [class] => jaja
            [checked] => 2
        )

)

Теперь вы можете использовать foreach, чтобы получить его значение, используйте его как хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...