У меня есть кнопка, которая отправляет индекс изображения в функцию javascript. Это простой цикл foreach, который зацикливает строки изображений в базе данных.
rImagem() получает в качестве аргумента индекс, который мне нужно стереть внутри массива imagens.
Скрипт PHP:
<php foreach((array)$images_gallery as $key => $value): ?>
if ($value != null):
<a href = "#" onclick = "rImagem('<?php echo $key;?>');return false;">Send</a>
<php endif;
endforeach;
?>
JavaScript:
function rImagem(data){
data = data -1;
var parse_obj = JSON.parse(document.getElementById('imagens').value);
parse_obj.splice(data,1);
console.info(parse_obj);
new_string = JSON.stringify(parse_obj);
document.getElementById('imagens').value = new_string;
//console.info(Object.keys(document.getElementsByClassName("btn_remover")));
var i = 1;
if (document.getElementsByClassName("btn_remover").length == i){
}
else{
document.getElementsByClassName("btn_remover")[data].remove();
}
}
Проблема в том, что изображения массива плохо стираются. Я никогда не мог стереть только один элемент, оставшийся в массиве (индекс = 0). И мне нужно уметь это делать.
Другая проблема заключается в том, что иногда я щелкаю элемент, который нужно удалить, и он удаляет следующий индекс в массиве вместо индекса элемента, по которому щелкнули.
Метод splice переиндексирует массив, метод delete сохраняет массив неизменным. Но пока ничего из этого не сработало.
С btn_remover я также пытаюсь удалить правильную миниатюру изображения, когда я нажимаю на нее.
Есть идеи, как исправить эту проблему?
Удаление элементов из массива нажатием кнопки, которая представляет собой миниатюру изображения. Также при нажатии на кнопку кнопка также исчезает.
Не понимаю, почему delete в этом случае не подойдет? Вы можете объяснить почему?
С удалением он оставляет пробелы в массиве, и мне нужно, чтобы массив был непрерывным.
@ AndréCastro «Я хочу, чтобы он был рядом с удаленными, но не хочу, чтобы он переиндексировался». Как ваши требования возможны?
Да ... это противоречие ... но мне нужно удалить массив, не оставляя видимых пробелов и сохраняя нумерацию индексов. Как это: [1,3,7], а не как [, 1,, 3,7].
Я не думаю, что вам вообще нужно беспокоиться об индексах массивов, я думаю, что, вероятно, есть гораздо более простой способ решить проблему. Что ты пытаешься сделать?
@ AndréCastro Я понимаю, о чем вы спрашиваете, но это просто невозможно, потому что вы хотите полагаться на индекс массива для соответствия значению. Вы можете добиться именно того, что вы только что описали, с помощью splice(), но тогда ваши индексы не совпадают.
@ AndréCastro Джеймс прав в том, что полагаться на индекс - это неправильный путь (как я описал в своем комментарии выше). Можете ли вы отредактировать свой вопрос, чтобы описать проблему, которую вы пытаетесь решить, вместо того, чтобы спрашивать о своем решении?
Да ... может быть, мне нужно написать еще один aproach без цикла foreach для передачи ключей в качестве индексов ... Я думаю, что проблема там ...
@ AndréCastro У меня такое чувство, что это будет иметь отношение к тому, как выглядит ваша стоимость imagens. Включение этой статьи очень важно для ответа на ваш вопрос.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Индексы parse_obj будут сдвигаться каждый раз, когда вы удаляете элемент, поэтому это не сработает. Что ты пытаешься сделать?