1

最近、剣道テンプレートの奇妙な動作に遭遇しました。テンプレートに入力がある場合、テンプレートは最初に入力された値のみを記憶します。したがって、入力した値を後で上書きすることはできません。

次のテンプレートがあります

    <script id="add-new-gruppe" type="text/x-kendo-template">
        <div class="row-fluid">
            <div class="span12">
                <label>Name:</label>
                <input type="text" class="span12" id="groupName" name="newGroupName" /><br />
            </div>
        </div>
        <br />
        <div class="pull-right">
            <button class="add-new-gruppe btn btn-primary">OK</button>
            <button class="add-new-gruppe-cancel btn">Cancel</button>
        </div>
    </script>​

問題は、ユーザーが複数のグループを追加しようとすると、最初に入力した名前のみが考慮されるため、これを行うことができないことです。

ここで問題を再現できます(削除確認の例に基づいています):

http://jsfiddle.net/x79yp/2/

  • 「記録を削除」をクリック
  • 123を入力してください
  • [はい] をクリックします
  • 入力した値のアラートが表示されます。
  • 「記録を削除」をクリック
  • 345を入力してください
  • [はい] をクリックします
  • 入力した値「345」ではなく「123」のアラートが表示される

これは非常に面白いバグであるか、特定の動作です。

なぜこれが起こっているのか、どのように修正できるのか考えていますか?

4

1 に答える 1

2

問題は、ウィンドウを複数回作成していて、削除していないことです。次に要素を要求するinputと、最初の要素の値が取得されます(最後に作成された要素ではありません)。

代わりに、この他のコードを検討してください。

HTML

<button class="delete-button k-button">Delete record</button>
<script id="delete-confirmation" type="text/x-kendo-template">
    <p class="delete-message"> Enter anything </p>
    <input class="span12" id='enteredText'/><br/>
    <button class="delete-confirm k-button"> Yes</button>
    <a href="#" class="delete-cancel k-button">No</a>
</script>

JavaScript:

$(document).ready(function () {
    var template = $("#delete-confirmation").html();
    // Create window once
    var kendoWindow = $("<div />").kendoWindow({
        title    : "Confirm",
        resizable: false,
        modal    : true,
        visable  : false
    }).html(template).data("kendoWindow");

    $(".delete-confirm", kendoWindow.element).click(function (e) {
        alert($('#enteredText').val());
        kendoWindow.close();
    });

    $(".delete-button").click(function (e) {
        $('#enteredText').val("");  // Clean previous value
        kendoWindow.open();
    });

    $(".delete-cancel").click(function () {
        kendoWindow.close();  // Cancel without showing
    });
});

ここで実行されているのを見てください

于 2013-01-14T17:33:11.603 に答える