2014-02-24 459 views
1

我在使用kendo ui對話窗口時遇到問題。當我第二次打開kendo對話框窗口,然後點擊接受按鈕,事件觸發兩次,下次觸發三次,依此類推。 有工作示例http://jsfiddle.net/T89mG/74/。 我在哪裏犯了一個錯誤?Kendo ui點擊事件多次觸發

addToQueueWindow = $("#AddToQueueWindow").kendoWindow({ 
    modal: true, 
    visible: false 
}).data("kendoWindow"); 

$(document).ready(
    $("#showAddMessageDialog") 
    .button() 
    .click(function (e) { 
     addToQueueWindow.center().open(); 
     addToQueueWindow.wrapper 
      .find(".add-confirm,.add-cancel") 
      .click(function (e) { 
       if ($(this).hasClass("add-confirm")) { 
        $.ajax({ 
         url: '@Url.Action("AddToQueueHandler", "ManageMessageState")', 
        type: 'POST', 
        data: { Id: $("#MessageidInput").val() }, 
        complete: function (event, ui) { 
         $("#QueueContentGrid").data("kendoGrid").dataSource.read(); 
        } 
       }); 
      } 
       addToQueueWindow.close(); 
      }); 
    }) 
); 

回答

2

,當你調用.kendoWindow()正在建立的對話窗口小部件的DOM元素,但每次您點擊按鈕,在打開的窗口中,您在添加其他.click()處理程序的按鈕窗戶。窗口關閉時,這些DOM元素不會被刪除。他們只是隱藏起來。因此,您正在將多個點擊處理程序添加到相同的DOM元素。

您應該移動:你的點擊處理程序的

addToQueueWindow.wrapper 
     .find(".add-confirm,.add-cancel") 
     .click(function (e) { 

外面打開的窗口按鈕。只要做到這一點,一旦調用.kendoWindow()

1

聽起來像是你應該初始化您的對話框只有一次(創建並添加處理程序)。然後,每次你需要對話的時間來展示你只叫你的

kendoWindow.data("kendoWindow").center().open();

行代碼。它看起來像每次打開對話框時添加一個新的點擊hanlder,以前的處理程序和新的處理程序將全部在click事件上調用。

here被盜幫助:)

+0

我初始化對話窗口只有一次,它返回到addToQueueWindow變量。 –

0

後跟隨CodingWithSpike,我是編輯你的代碼和工作:

addToQueueWindow = $("#AddToQueueWindow").kendoWindow({ 
     modal: true, 
     visible: false 
    }).data("kendoWindow"); 

addToQueueWindow.wrapper 
       .find(".add-confirm,.add-cancel") 
       .click(function (e) { 
        if ($(this).hasClass("add-confirm")) { 
         $.ajax({ 
          url: '@Url.Action("AddToQueueHandler", "ManageMessageState")', 
          type: 'POST', 
          data: { Id: $("#MessageidInput").val() }, 
          complete: function (event, ui) { 
           alert("Complete"); 
          } 
         }); 
        } 
        addToQueueWindow.close(); 
       }).end(); 

$("#showAddMessageDialog") 
      .click(function (e) { 
      addToQueueWindow.center().open(); 
     });