2016-05-06 2 views
1

Я работаю над приложением списка покупок, и у меня есть удаление проблемы и добавление элемента в массив.ActionScript 3 Не удается добавить и удалить элемент из массива

У меня есть output_txt.text и input_txt.text с тремя кнопками add_btn, remove_btn и clear_btn. В моем списке (выходе) у меня есть предметы «Хлеб, корм для собак, яйца, гамбургер, молоко». Я хочу иметь возможность добавлять элементы в список и сортировать их по алфавиту.

Когда я добавляю элемент, он сортирует его в алфавитном порядке, однако, когда я пытаюсь добавить другой элемент, он просто заменяет последний элемент, который я ввел.

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

(The totalItems_txt.text является общее количество элементов я добавлять и удалять из списка.)

Вот мой код:

clear_btn.addEventListener(MouseEvent.CLICK, ClearList); 
function ClearList(e:MouseEvent):void { 
output_txt.text = ""; 
totalItems_txt.text = "0"; 
} 

addItem_btn.addEventListener(MouseEvent.CLICK, AddItem); 
function AddItem(e:MouseEvent):void { 
var newItems:Array = ["Bread", "Dog Food", "Eggs", "Hamburger", "Milk"]; 
newItems[0] = "Bread"; 
newItems[1] = "Dog Food"; 
newItems[2] = "Eggs"; 
newItems[3] = "Hamburger"; 
newItems[4] = "Milk"; 
newItems[5] = input_txt.text; 
newItems.sort(Array.CASEINSENSITIVE); 
input_txt.text = ""; 
output_txt.text = ""; 
for (var i:int = 0; i < newItems.length; i++){ 
    output_txt.appendText(newItems[i] + "\n"); 
} 
totalItems_txt.text = newItems.length.toString(); 
} 

remove_btn.addEventListener(MouseEvent.CLICK, RemoveItems); 
function RemoveItems(e:MouseEvent):void { 
    var items:Array = ["Bread", "Dog Food", "Eggs", "Hamburger", "Milk"]; 
    items[0] = "Bread"; 
    items[1] = "Dog Food"; 
    items[2] = "Eggs"; 
    items[3] = "Hamburger"; 
    items[4] = "Milk"; 
    items[5] = input_txt.text; 
    output_txt.text = ""; 
    items.splice(1,1); 
    for (var i:int = 0; i < items.length; i++){ 
     output_txt.appendText(items[i] + "\n"); 
    } 
    totalItems_txt.text = items.length.toString(); 
} 

ответ

0

Все, что вам нужно сделать, это объявить массив как public, а затем добавьте только значения в массив, используя push(). при сортировке фактического индекса массива все еще остается, но индекс отображаемых элементов будет отличаться, но

1

. Если вы предоставите complete and verifiable example, то проще определить причину проблемы, понимание методов Array:

  1. splice(startIndex:int, deleteCount:uint), для удаления предметов.
  2. push(... args), для добавления предметов.

Если вы явно ссылаться newItems[0] через [5], то вы будете только когда-либо влиять на записи 0 - 5, однако, push полезен, так как он просто добавляет его в конец вашего массива. И наоборот, вы можете использовать либо splice (специально предназначенный для определенного индекса), либо pop() (который удаляет последний элемент из массива), чтобы удалить элементы из вашего массива.

Другая проблема заключается в том, что ваши массивы являются локальными. Поскольку вы воссоздаете их каждый раз, когда вы вызываете RemoveItems или AddItem, вы никогда не сохраните изменения. Итак, переместите его за пределы этих функций, и он будет сохранен между кликами.

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

import flash.text.TextField; 
import flash.events.KeyboardEvent; 
import flash.display.Sprite; 

var items:Array = ["Bread", "Dog Food", "Eggs", "Hamburger", "Milk"]; 

function addItem(e:MouseEvent):void { 
    if (input_txt.text != "") { // Assuming we having something in the input_txt, 
     items.push(input_txt.text); // add it to the end of our items array 
     input_txt.text = ""; 
     updateOutput(); 
    } 
} 

function removeItems(e:MouseEvent):void { 
    items.splice(0,1); 
    updateOutput(); 
} 

function clearList(e:MouseEvent):void { 
    items = []; // empty our list by replacing it with a new one. 
    output_txt.text = ""; 
    totalItems_txt.text = "0"; 
} 

function updateOutput():void { 
    items.sort(Array.CASEINSENSITIVE); 
    output_txt.text = ""; 
    for (var i:int = 0; i < items.length; i++){ 
     output_txt.appendText(items[i] + "\n"); 
    } 
    totalItems_txt.text = "Total: " + items.length; 
} 



/* Supplemental UI Creation */ 

var addItem_btn:Sprite = new Sprite(); 
addItem_btn.graphics.beginFill(0xa1FFa1,1); 
addItem_btn.graphics.drawRect(0,0,100,25) 
addChild(addItem_btn); 
addItem_btn.addEventListener(MouseEvent.CLICK, addItem); 

var clear_btn:Sprite = new Sprite(); 
clear_btn.graphics.beginFill(0xa1a1a1,1); 
clear_btn.graphics.drawRect(0,0,100,25) 
addChild(clear_btn); 
clear_btn.x = 101; 
clear_btn.addEventListener(MouseEvent.CLICK, clearList); 

var remove_btn:Sprite = new Sprite(); 
remove_btn.graphics.beginFill(0xFFa1a1,1); 
remove_btn.graphics.drawRect(0,0,100,25) 
addChild(remove_btn); 
remove_btn.x = 202; 
remove_btn.addEventListener(MouseEvent.CLICK, removeItems); 

var input_txt:TextField = new TextField(); 
addChild(input_txt); 
input_txt.type = "input"; 
input_txt.text = "input_txt"; 
input_txt.y = 50; 

var output_txt:TextField = new TextField(); 
addChild(output_txt); 
output_txt.text = "output_txt"; 
output_txt.y = 50; 
output_txt.x = 101; 

var totalItems_txt:TextField = new TextField(); 
addChild(totalItems_txt); 
totalItems_txt.text = "totalItems_txt"; 
totalItems_txt.y = 50; 
totalItems_txt.x = 202; 
Смежные вопросы