あなたの助けを借りてくれてありがとうございます。 私はjQueryにかなり精通していると思っていますが、Prototypeの宿題で妹を助けていた時、これは私を挫折させました。彼女は間に合ってそれを解決することができませんでしたが、私の正気のために、何が起こっているか教えてください。複数回点火するクラスに取り付けられたプロトタイプオブザーバー
単純に、AJAXによって追加、並べ替え、削除を行うnetflix形式のキューを作成していました。アイテムはUL内にあり、削除に使用される一意のIDを持つ各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 .= '<li id="list_'.$key.'">';
$output .= $task;
$output .= '<a href="#" id="task-'.$key.'" class="delete">X</a>';
$output .= '</li>';
}
echo $output;
問題は、私は、たとえば、第2項目を削除した場合、以下のすべての項目が同様に削除というものでした。 Firebugコンソールを通して、そのクラスのリンク(「削除」)をクリックすると、次のすべてのリスナーが起動し、2番目のアイテムを新しいリストから削除し続けるため、これが見つかった。どうして、どのようにしてそれを設定して、あなたがクリックしたリンクだけを発火させるのか教えてください。私は一日中ナッツを運転しました。私はjQueryで.click()を使用することに慣れています...現時点でPrototypeに対する憎しみは大いにあります。
おかげで再び!