Мы просто создавали очередь в стиле Netflix с добавлением, изменением порядка и удалением с помощью AJAX. Элементы находились в UL и имели ссылку на удаление внутри каждого LI с уникальными идентификаторами, которые можно было использовать для удаления. Пожалуйста, не зацикливайтесь на том, почему мы использовали текстовые файлы для сохранения данных и т. д. — профессор сделал этот непрактичный выбор в качестве требования, а также некоторых других.
JS:
Код: Выделить всё
function softRefresh() {
$$('.delete').invoke('observe','click',function() { taskDelete(this.id); });
Sortable.create("taskList", { onUpdate: function(list){ saveOrder(list); } });
}
function taskDelete(a) {
var tempArr = a.split('-');
var keyToDelete = tempArr[1];
var output;
var ajaxRequest = new Ajax.Request("todolist.php",
{
method: "post",
parameters: {
action: 'delete',
id: keyToDelete
},
onSuccess: function(response) {
$('taskList').update(response.responseText);
softRefresh();
}
});
}
PHP для действия «удалить»:
Код: Выделить всё
$jsonOutput = file_get_contents($myFile);
$fetchedArr = json_decode($jsonOutput);
$newArr = array();
foreach($fetchedArr as $key => $task) {
if(($key != $_POST['id'])) {
array_push($newArr, $task);
}
}
$jsonOutput = json_encode($newArr);
file_put_contents($myFile, $jsonOutput);
$output = '';
foreach($newArr as $key => $task) {
$output .= '[*]';
$output .= $task;
$output .= '[url=#]X[/url]';
$output .= '';
}
echo $output;
Проблема заключалась в том, что если я удалю, скажем, второй элемент, все последующие элементы также будут удалены. С помощью консоли Firebug я узнал, что это происходит потому, что когда вы нажимаете любую ссылку этого класса («удалить»), все следующие прослушиватели срабатывают и продолжают удалять второй элемент из нового списка. Можете ли вы сказать мне, почему и как я могу настроить его так, чтобы он запускался только по ссылке, по которой вы нажимаете? Это сводило меня с ума весь день. Я привык к использованию .click() в jQuery... сейчас очень ненавижу Prototype.
Подробнее здесь:
https://stackoverflow.com/questions/659 ... iple-times