2013-01-14 55 views
1

最近我遇到了奇多模板的奇怪行爲。如果您在模板中有輸入,模板將只記住第一個輸入的值。因此,您輸入的值不可能在以後覆蓋。Kendo模板記得先輸入的值

我有以下模板

<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>​ 

的問題是,如果用戶試圖添加超過1組 - 他永遠能做到這一點,因爲只有先進入的名字將被考慮在內。

在這裏,您可以重現該問題(我基於它刪除,確認爲例):

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

  • 點擊 「刪除記錄」
  • 進入123
  • 單擊是
  • 您會看到您剛輸入的值的警報。
  • 點擊「刪除記錄」
  • 進入345
  • 單擊是
  • 你看到「123」,而不是輸入值「345」

要麼這是一個非常有趣的錯誤警報或者某些特定的行爲。

任何想法,爲什麼發生這種情況,以及如何解決它?

回答

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 
    }); 
}); 

看見它運行here