#javascript #jquery #arrays
#javascript #jquery #массивы
Вопрос:
У меня есть две функции javascript, первая работает, вторая работает, но не отображает правильное значение в скрытых входных данных.
Мне удалось получить правильное последнее скрытое входное значение, но я не уверен, как
var customTicketsArr = Array();
function EditEventAddTicket(){
alertWrongTime = false;
var TicketName = jQuery("#ticketname").val();
var TicketPrice = jQuery("#ticketprice").val();
var ticketquantity = jQuery("#ticketquantity").val();
var storeString = "TicketName" TicketName "TicketPrice" TicketPrice "Quantity" ticketquantity '';
customTicketsArr.push(storeString);
EditEventUpdateTickets(true);
}
function EditEventUpdateTickets(fade){
jQuery("#custom_tickets_string").val(customTicketsArr);
var output = "";
var style = "";
for (i = customTicketsArr.length-1; i >= 0; i--){
ticketname = customTicketsArr[i].split("TicketName");
ticketprice = customTicketsArr[i].split("TicketPrice");
ticketquantity = customTicketsArr[i].split("Quantity");
if(fade){
if (customTicketsArr.length - 1 == i){
style = "display: none; ";
var fadeInDiv = i;
} else {
style = "";
}
}
if (i % 2 == 1) { style = "background-color: #660000; "}
html = "<div id='customticket" i "' class='customeventbase' style='" style "'>";
html = '<input type="hidden" name="customTicketid[' i '][Name]" id="customticketName' i '" value="' ticketname '" />';
html = '<input type="hidden" name="customTicketid[' i '][Price]" id="customticketPrice' i '" value="' ticketprice[1] '" />';
html = '<input type="hidden" name="customTicketid[' i '][Quantity]" id="customticketQuantity' i '" value="' ticketquantity[1] '" />';
html = '<button class="customeventdel" type="button" onClick="EditEventRemoveDate(' i ')"></button>';
html = '<div class="clear"></div>';
html = '</div>n';
output = html;
}
output = "<input type='hidden' id='custom_ticket_info' name='custom_ticket_info' value='" customTicketsArr "' />";
jQuery("#custom_ticket_container").html(output);
if(fade){
setTimeout("EditEventfadeInDiv(" fadeInDiv ")", 10);
}
}
это выводит:
<div style="background-color: #660000; " class="customeventbase" id="customticket1">
<input type="hidden" value=",testTicketPrice50Quantity44" id="customticketName1" name="customTicketid[1][Name]">
<input type="hidden" value="undefined" id="customticketPrice1" name="customTicketid[1][Price]">
<input type="hidden" value="44" id="customticketQuantity1" name="customTicketid[1][Quantity]">
<button onclick="EditEventRemoveDate(1)" type="button" class="customeventdel"></button>
<div class="clear"></div></div>
значения для первых двух скрытых полей неверны
Комментарии:
1. Оставляя код в стороне, можете ли вы объяснить, чего вы пытаетесь достичь?
Ответ №1:
Это не неправильные значения — split()
делает именно то, что и должно — возвращает массив подстрок после удаления разделителя.
В вашей строковой структуре разделение на TicketName
даст вам две строки — подстроку перед разделителем и подстроку после — TicketName
сама по себе не включена.
Таким образом, для строки "TicketNametestTicketPrice50Quantity44"
вы получите ""
и "testTicketPrice50Quantity44"
при разделении на "TicketName"
. Разделение одной и той же строки на TicketPrice
даст вам "TicketNametest"
и "50Quantity44"
.
Я бы предложил вместо этого поместить объекты в ваш массив —
var storeObject = {
"TicketName" : TicketName,
"TicketPrice" : TicketPrice,
"Quantity" : ticketquantity
};
customTicketsArr.push(storeObject);
Затем вы можете получить обратно данные в виде:
for (i = customTicketsArr.length-1; i >= 0; i--){
var currentObject = customTicketsArr[i];
var ticketname = currentObject.TicketName;
var ticketprice = currentObject.TicketPrice;
var ticketquantity = currentObject.Quantity;
//do other stuff here
}
Ответ №2:
почему вы сохраняете это как строку? Я бы рекомендовал сохранить его в объекте:
function EditEventAddTicket(){
alertWrongTime = false;
var TicketName = jQuery("#ticketname").val();
var TicketPrice = jQuery("#ticketprice").val();
var ticketquantity = jQuery("#ticketquantity").val();
var ticket = {"TicketName": TicketName, "TicketPrice": TicketPrice, "Quantity": ticketquantity};
customTicketsArr.push(ticket);
EditEventUpdateTickets(true);
}
и затем вы можете просто загрузить данные:
for (i = customTicketsArr.length-1; i >= 0; i--){
ticketname = customTicketsArr[i].TicketName;
ticketprice = customTicketsArr[i].TicketPrice;
ticketquantity = customTicketsArr[i].Quantity;
// ...
}
Ответ №3:
Почему бы просто не создать двумерный массив?
var customTicketsArr = Array();
function EditEventAddTicket() {
customTicketsArr.push({
'name' : jQuery("#ticketname").val(),
'price' : jQuery("#ticketprice").val(),
'qty' : jQuery("#ticketquantity").val()
});
}