Динамически изменить переменные - PullRequest
0 голосов
/ 07 мая 2018

Поскольку у меня есть пара записей, которые нужно разделить на число, которое я предоставляю (переменная num1), я нахожу трудности для выполнения задачи.

Я хочу, чтобы цикл делил меня и сохранял значение для каждой переменной, называемой listX, с 34. Есть 9 списков (каждый имеет различное число), и я хочу, чтобы каждый список был разделен с числом, которое я предоставляю, но сначала должно быть разделено с 2, затем с 3, затем с 4, 5 ... до числа, которое я предоставляю.

Я понял, что это можно сделать лучше всего с объектами, но я не могу найти решение, так как я не настолько опытен с этим материалом. Идеальным было бы получить объекты вроде:

Список 1: 1-е деление: ххх

Список 1: 2-е деление: ххх

Список 1: 34-е деление: ххх

...

Список 8: 22-е деление: ххх

...

Список 9: 33-й дивизион: ххх Список 9: 34-е деление: ххх

«x-е деление» должно быть связано с числом i, указанным в переменной num1

Я пытаюсь получить что-то вроде этого:

Он спрашивает меня, сколько раз я хочу, чтобы мои значения были разделены, я набираю 5. Затем он спрашивает меня, каковы значения моих 9 входов.

Я объявляю на первый вход 100. Результат, который я хочу, должен быть:

100/1 = 1

100/2 = 50

100/3 = 33,33

100/4 = 25

100/5 = 20

Затем я объявляю второй входной номер 200. Результат должен быть:

200/1 = 200

200/2 = 100

200/3 = 66,66

200/4 = 50

200/5 = 40

Идет до самого последнего ввода ...

То, что я пытаюсь разработать, - это метод Д'Хондта для распределения мест в парламенте, который используется в некоторых странах.

Вот что у меня так далеко, но, разумеется, это не работает.

var array1 = [];
var list = "list";

function someFunction() {
    var num1 = 34;
    for (var i = 1; i <= num1; ++i) {
        for (var j = 1; j <= 9; j++) {

            array1[j] += document.getElementById(list + j).value / i;
            array1[j] += "<br/>";

        }
    }
    document.getElementById("demo1").innerHTML = list + j;
}
<tr>
   <td><input type="text" id="list1" style="width:50px" onkeyup="someFunction()"></input></td>
   <td><input type="text" id="list2" style="width:50px" onkeyup="someFunction()"></input></td>
   <td><input type="text" id="list3" style="width:50px" onkeyup="someFunction()"></input></td>
   <td><input type="text" id="list4" style="width:50px" onkeyup="someFunction()"></input></td>
   <td><input type="text" id="list5" style="width:50px" onkeyup="someFunction()"></input></td>
   <td><input type="text" id="list6" style="width:50px" onkeyup="someFunction()"></input></td>
   <td><input type="text" id="list7" style="width:50px" onkeyup="someFunction()"></input></td>
   <td><input type="text" id="list8" style="width:50px" onkeyup="someFunction()"></input></td>
   <td><input type="text" id="list9" style="width:50px" onkeyup="someFunction()"></input></td>
</tr>

1 Ответ

0 голосов
/ 07 мая 2018

Я думаю, это то, что вы ищете, но пара замечаний.

Пара заметок:

  • Элемент input не имеет закрывающего тега.
  • type="text по умолчанию для input элементов, поэтому вам не нужно написать это.
  • Не повторяйся (СУХОЙ). Поскольку все ваши input элементы должны тот же стиль, просто установите одно правило CSS, чтобы стилизовать их все так же.
  • Не используйте встроенные обработчики событий HTML. Отделите ваш JavaScript от Ваш HTML и следуйте современным стандартам.

Подробности см. В комментариях ниже.

// Get the number to divide by (You can get this anyway you want. A prompt is show here.):
var num = +prompt("How many calculations per input would you like?");

// Get all the table inputs into an array
var inputs = Array.prototype.slice.call(document.querySelectorAll("td > input[id^='input']"));

// Loop over the input array...
inputs.forEach(function(input){
  // Set up an event handler for the input
  input.addEventListener("input", someFunction);
});

function someFunction(){
  var resultString = "";
  for(var i = 0; i < num; i++){
    // Do the math and build up the string
    resultString += (this.value / (i + 1)) + "<br>"; 
  }
  
  // Update the output cell that corresponds to the input element with the results
  document.querySelector("#" + this.id.replace("input", "output")).innerHTML = resultString;
}
td > input { width:50%; }
<table id="inout">
  <tr>
    <td><input id="input1"></td>
    <td><input id="input2"></td>
    <td><input id="input3"></td>
    <td><input id="input4"></td>
    <td><input id="input5"></td>
    <td><input id="input6"><td>
    <td><input id="input7"></td>
    <td><input id="input8"></td>
    <td><input id="input9"></td>
  </tr>
  <tr>
    <td id="output1"></td>
    <td id="output2"></td>
    <td id="output3"></td>
    <td id="output4"></td>
    <td id="output5"></td>
    <td id="output6"><td>
    <td id="output7"></td>
    <td id="output8"></td>
    <td id="output9"></td>
  </tr>  
</table>

<div id="output"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...