1

http://www.jquery-steps.com/のウィザードを使用しています。ウィザードのすべてが非常にスムーズに機能しますが、そのウィザード内の入力フィールドにイベントをバインドしようとすると、機能しません。以下は、この問題の重要なコードです。

<div class="content">
            <h1>Basic Demo</h1>


            <div id="wizard">
                <h2>First Step</h2>
                <section>
                    <input type="text" class="namer" />

                    <div class="text">This should be replaced</div>

                <h2>Second Step</h2>
                <section>
                    <pdfsgdf</p>
                </section>

            </div>
        </div>

<script>
$(".namer").change(function(e){
  $(".text").html($(this).val()); 
});

$(function ()
                {
                    $("#wizard").steps({
                        headerTag: "h2",
                        bodyTag: "section",
                        transitionEffect: "slideLeft"
                    });
                });

</script>

JSFiddle はhttp://jsfiddle.net/m23px/にあります。

4

4 に答える 4

6

ウィザードが読み込まれると、イベント リスナーが変更されるようです。代わりに でイベントをリッスンする必要があります#wizard

これを試して:

$("#wizard").on('change','.namer',function(){
    $(".text").html($(this).val());     
});

注: フィールドがフォーカスを失った後ではなく、ユーザーが入力しているときに変更が発生するようにする場合は、代わりにkeyupイベントを使用できます。

$("#wizard").on('keyup','.namer',function(){
    $(".text").html($(this).val());     
});
于 2013-11-18T16:36:23.827 に答える
4

なぜこれが起こっているのかを明確にするために -render関数 (行 892) では、ウィザードのコンテンツが使用して削除される.empty()ため、その内部の要素にバインドされたリスナーはすべて失われます。

wizard.attr("role", "application").empty().append(stepsWrapper).append(contentWrapper)
    .addClass(options.cssClass + " " + options.clearFixCssClass + verticalCssClass);

したがって、これを解決するには 3 つのオプションがあります。1 つ目は、Trevorが言ったように、リスナーをウィザード要素または DOM のその上の要素にバインドすることです。

2 つ目は、プラグインの読み込みが完了したときのコールバックを追加し、その時点でリスナーを通常どおりに初期化することです。

render3 つ目は、次のように、元の 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);
}
于 2014-06-13T09:06:03.963 に答える