javascript — создание уникальных идентификаторов скрытых полей из опций меню выбора

У меня есть модал, который отображает информацию о запасах для конкретного товара, который имеет несколько мест на складе. Пользователь выбирает местоположения и количества из каждого меню и нажимает кнопку «Подтвердить». Затем необходимо импортировать информацию из этого режима в распечатанный список выбора.

Для этого я планировал использовать массивы для передачи данных в список выбора.

У меня есть скрытое поле для каждой строки, содержащее значения Location и Qty Picked оттуда.

Местоположение 1 + Кол-во 1 = Скрытое Поле 1

Местоположение 2 + Кол-во 2 = Скрытое Поле 2

Теперь я хочу иметь возможность поместить эти скрытые поля в массив после нажатия кнопки.

Скрытое поле 1 + скрытое поле 2 = массив.

Я могу создать скрытые поля просто отлично, когда я собираюсь создать окончательный массив, содержащий все данные, кажется, что мне нужно только добавить новое скрытое поле, которое будет создано в нем.

Диалог — Кнопка выбора количества (используется для подтверждения выбора):

//PICK QUANTITY Button
'Pick Quantity': function() {

jQuery('.ui-dialog button:nth-child(1)').button('disable');

//Disables the current selection, so that it cannot be editted
$('#AddLocQtyPick'+Picker).prop ('disabled', true);

//Disables the current selection, so that it cannot be editted
$('#LocationPickerSelect'+ Picker).prop ('disabled', true);

//Adds Unique Number to the ID of the input fields
Picker++;

//For Loop that helps to total up the quanities being selected in each picker
total=0;
for (i = 0; i<Picker; i++) {
total= total + $('#AddLocQtyPick'+i).val() * 1.0;
}

//Variable decides max value of pick on appends using previous selection
QtyReqTot= QtyReq - total;


//"Pick Another location" button is enabled whilst Qty Req has not been met
if (total !== QtyReq){
jQuery('.ui-dialog button:nth-child(2)').button('enable');
}

//"Pick Quantity", "Pick Another Location" are disabled, whilst "Confirm" button is enabled when total reaches Qty Req
if (total == QtyReq){
jQuery('.ui-dialog button:nth-child(2)').button('disable');
jQuery('.ui-dialog button:nth-child(1)').button('disable');
jQuery('.ui-dialog button:nth-child(3)').button('enable');
}

//Pick Another Location button is disabled if no more locations to pick from
if (length == 1){
jQuery('.ui-dialog button:nth-child(2)').button('disable');
}

if (total !== QtyReq && length == 1){
jQuery('.ui-dialog button:nth-child(1)').button('disable');
$(":button:contains('Cancel')").focus();
}



//Create Hidden Field - Location

//for loop that creates the fields

for (i = 0; i<Picker; i++){
HiddenSelection = [$('#LocationPickerSelect'+i).val(),$('#AddLocQtyPick'+i).val()];
var appendHiddenSelection = '<input type="hidden" class="HiddenSelection'+ i +'" value='+HiddenSelection+'>';
$('#AddLocationPicker').append(appendHiddenSelection);
alert(appendHiddenSelection +'This is SelectionField'+i);

}
},

Кнопка подтверждения — используется для создания окончательного массива, содержащего предыдущие массивы:

'Confirm': function() {

//Reset the length loop
length = undefined;

//Remove "Multiple Location" icon from the row.
$('#icon'+id).hide();

//Checks "Multiple Location" icon for existence and adds Pick List button when all hidden.
$('img[id^=icon]:visible').length || $('#ProcessPickList').show();

//Change text colour back to blue to have visual confirmation that item is ready for picking
$('#Desc'+id).css('color', '#0000FF');
$('#QtyReq'+id).css('color', '#0000FF');
$('#QtyinStock'+id).css('color', '#0000FF');

//Create Total Array

TotalHiddenArray = [HiddenSelection]

alert (TotalHiddenArray);


$(this).dialog('close');

},

Я думаю, что мне нужно иметь возможность создавать уникальные IDS для полей ввода и показывать, как заставить их всех добавляться в массив.

1

Решение

Вы можете попробовать заменить

HiddenArray = [appendHiddenQty, appendHiddenLocation]

От

HiddenArray[HiddenArray.length] = [appendHiddenQty, appendHiddenLocation]

Таким образом, вместо перезаписи HiddenArray в цикле, вы просто добавляете [appendHiddenQty, appendHiddenLocation] в конце HiddenArray,


EDIT1:

замещать

HiddenSelection = [$('#LocationPickerSelect'+i).val(),$('#AddLocQtyPick'+i).val()];

от

HiddenSelection[HiddenSelection.length] = [$('#LocationPickerSelect'+i).val(),$('#AddLocQtyPick'+i).val()];

Или вы также можете использовать push :

HiddenSelection.push([$('#LocationPickerSelect'+i).val(),$('#AddLocQtyPick'+i).val()]);

Пожалуйста, посмотрите это быстро сделал скрипку


EDIT2:

Хорошо, давайте попробуем заменить весь цикл:

var HiddenSelection = new Array;
for (i = 0; i<Picker; i++){
HiddenSelection = [$('#LocationPickerSelect'+i).val(),$('#AddLocQtyPick'+i).val()];
var appendHiddenSelection = '<input type="hidden" class="HiddenSelection'+ i +'"     value='+HiddenSelection+'>';
$('#AddLocationPicker').append(appendHiddenSelection);
alert(appendHiddenSelection +'This is SelectionField'+i);

TotalHiddenArray.push([HiddenSelection]);
}

Вы просто должны удалить это из вашего confirm функция:

//Create Total Array
TotalHiddenArray = [HiddenSelection]

Вы также должны Delcare TotalHiddenArray как новый массив вне какой-либо функции (например, в самом верху вашего кода JS, потому что, я полагаю, вы пытаетесь получить доступ к TotalHiddenArray из другой функции, чем цикл), как это:

var TotalHiddenArray= new Array;

Другая скрипка

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]