私は、大学の学部向けに単純な Web ベースのコース スケジューラを作成しており、現在 UI を開発しています。jQuery UI のアコーディオンとソート可能な拡張機能で作成しています。コースの追加・削除や用語の追加・削除ができるように設定しています。
私が直面している問題は、用語が既に HTML ページの一部である場合、すべてが問題なく機能することです。ただし、jQueryで用語OLを追加すると、コースは追加できますが、削除できません。コースを削除しようとすると、Object Expected エラーが発生します。既存の li 要素を別の用語からドラッグしても、それらを新しい用語から削除しようとすると、Object Expected エラーが発生します。
私の考えでは、1) 新しい用語を更新する必要があるか、2) 新しい用語を正しく初期化していません。以下は私のjavascriptです。
リクエストがあれば、html コードを共有できますが、これは JavaScript 関数を呼び出すボタンを備えた単なるフォームです。
// Remove selected courses from term
function remCourse(term) {
var termDiv = '#term' + term + 'classes';
$(termDiv).children().children().children(":checked").each(function() {
$(this).parent().parent().remove();
});
}
// Add course to term
function addCourse(term) {
var termDiv = '#term' + term + 'classes';
var course = $(termDiv).children().length + 1;
$(termDiv).append('<li class="ui-state-active"><span class="courseAction"><input name="' + term + 'c' + course + 'box" type="checkbox" /> Dept & Num: <input type="text" id="' + term + 'c' + course + 'num" name="' + term + 'c' + course + 'num" size="8" maxlength="6" /> Credits: <input type="text" id="' + term + 'c' + course + 'cred" name="' + term + 'c' + course + 'cred" size="4" maxlength="3" /> # of Meetings: <input type="text" id="' + term + 'c' + course + 'meet" name="' + term + 'c' + course + 'meet" size="8" maxlength="6" /> Title: <input type="text" id="' + term + 'c' + course + 'num" name="' + term + 'c' + course + 'num" size="20" maxlength="50" /> </span></li>'
);
}
// Remove selected terms
function remTerm() {
$("#terms").children().children().children(":checked").each(function() {
$(this).parent().parent().remove();
});
}
// Add new term
function addTerm(term) {
var termDiv = '#term' + term + 'classes';
$("#terms").append('<div id="term' + term + '" class="connectedTerms"> <h4 class="ui-widget-header"><input class="tbox" name="t' + term + 'box" type="checkbox" />Term ' + term + '<input id="addCourse' + term + '" type="button" onclick="addCourse(this.id.substring(9))" value="Add Course" class="ui-button-text-only" /> <input id="remCourse' + term + '" type="button" onclick="removeCourse(this.id.substring(9))" value="Remove Selected Courses" class="ui-button-text-only" /> </h4> <ol id="term' + term + 'classes" class="connectedSortable"> <li class="ui-state-active"><span class="courseAction"> <input name="' + term + 'c1box" type="checkbox" /> Dept & Num: <input type="text" id="' + term + 'c1num" name="' + term + 'c1num" size="8" maxlength="6" /> Credits: <input type="text" id="' + term + 'c1cred" name="' + term + 'c1cred" size="4" maxlength="3" /> # of Meetings: <input type="text" id="' + term + 'c1meet" name="' + term + 'c1meet" size="8" maxlength="6" /> Title: <input type="text" id="' + term + 'c1num" name="' + term + 'c1num" size="20" maxlength="50" /> </span></li> </ol> </div>'
);
$(termDiv).sortable({
connectWith: ".connectedSortable",
dropOnEmpty: true,
placeholder: "ui-state-highlight"
}).disableSelection();
// I tried doing a refresh below, but it just gave me an error
// so I commented it out.
//$(termDiv).sortable('refresh');
}