なぜこれが起こっているのかを明確にするために -render
関数 (行 892) では、ウィザードのコンテンツが使用して削除される.empty()
ため、その内部の要素にバインドされたリスナーはすべて失われます。
wizard.attr("role", "application").empty().append(stepsWrapper).append(contentWrapper)
.addClass(options.cssClass + " " + options.clearFixCssClass + verticalCssClass);
したがって、これを解決するには 3 つのオプションがあります。1 つ目は、Trevorが言ったように、リスナーをウィザード要素または DOM のその上の要素にバインドすることです。
2 つ目は、プラグインの読み込みが完了したときのコールバックを追加し、その時点でリスナーを通常どおりに初期化することです。
render
3 つ目は、次のように、元の html (したがって元のリスナー) を使用するように関数を変更することです。
function render(wizard, options, state) {
// Create a content wrapper and copy HTML from the intial wizard structure
var contentWrapperTemplate = "<{0} class=\"{1}\"></{0}>",
stepsWrapperTemplate = "<{0} class=\"{1}\">{2}</{0}>",
orientation = getValidEnumValue(stepsOrientation, options.stepsOrientation),
verticalCssClass = (orientation === stepsOrientation.vertical) ? " vertical" : "",
contentWrapper = $(contentWrapperTemplate.format(options.contentContainerTag, "content " + options.clearFixCssClass)),
stepsWrapper = $(stepsWrapperTemplate.format(options.stepsContainerTag, "steps " + options.clearFixCssClass, "<ul role=\"tablist\"></ul>"));
// Transform the wizard wrapper by wrapping the innerHTML in the content wrapper, then prepending the stepsWrapper
wizard.attr("role", "application").wrapInner(contentWrapper).prepend(stepsWrapper)
.addClass(options.cssClass + " " + options.clearFixCssClass + verticalCssClass);
//Now that wizard is tansformed, select the the title and contents elements
var populatedContent = wizard.find('.content'),
stepTitles = populatedContent.children(options.headerTag),
stepContents = populatedContent.children(options.bodyTag);
// Add WIA-ARIA support
stepContents.each(function (index) {
renderBody(wizard, state, $(this), index);
});
stepTitles.each(function (index) {
renderTitle(wizard, options, state, $(this), index);
});
refreshStepNavigation(wizard, options, state);
renderPagination(wizard, options, state);
}