jquery弹出两次“OK”按两次以使其消失

时间:2013-04-18 15:26:04

标签: javascript jquery jquery-ui kendo-ui kendo-grid

我有一个问题,我试图找出为什么我必须按两次弹出按钮的“确定”按钮才能使其消失。我可以从我的代码中看到,我只有一个警告声明,但它仍然表现得好像我可能意外地调用了两个警报声明

function intialiseKendoGrid(date) {
     gridResult = $('#grid').kendoGrid({
         scrollable: {
             virtual: true
         },
         navigatable: true,
         groupable: true,
         sortable: true,
         selectable: "row",
         pageable: true,

         pageable: {
             input: true,
             numeric: false
         },

         resizable: true,
         reorderable: true,
         filterable: {
             extra: false
         },
         columns: [{
             field: "DealNumber",
             width: 150,
             title: "DealNumber",

             filterable: {
                 operators: {
                     string: {
                         startswith: "Starts With",
                         contains: "Contains"
                     }
                 }

             },
         },
         {
             field: "DealIssuer",
             width: 150,
             title: "Issuer",
             filterable: {
                 operators: {
                     string: {
                         startswith: "Starts With",
                         contains: "Contains"
                     }
                 }
             },
             //template: "<a href='http://manager.dealogic.com/ManagerV3/CPCortex/Default/${DealNumber}'>${DealNumber}</a>"  
             template: "<a>${DealIssuer}</a>"

         }, {
             field: "Ticker",
             width: 150,
             title: "Ticker",
             filterable: {
                 operators: {
                     string: {
                         startswith: "Starts With",
                         contains: "Contains"
                     }
                 }
             }    
         }, {
             field: "DealExchange",
             width: 150,
             title: "Exchange",
             filterable: {
                 operators: {

                     string: {
                         startswith: "Starts With",
                         contains: "Contains"
                     }
                 }
             }
         }, {
             field: "DealType",
             width: 150,
             title: "Type",
             filterable: {
                 operators: {
                     string: {
                         startswith: "Starts With",
                         contains: "Contains"
                     }
                 }
             }

         }, {
             field: "DealValue",
             width: 150,
             title: "Value ($m)",
             filterable: {
                 operators: {
                     string: {
                         startswith: "Starts With",
                         contains: "Contains"
                     }
                 }
             },
             /*   template: '#= kendo.culture("en-US");kendo.toString(${DealValue/1000000},"p")#' */

             template: '#= kendo.toString(DealValue,"c2") #'

         }, {
             field: "DealStatus",
             width: 150,
             title: "Status",
             filterable: {
                 operators: {
                     string: {
                         startswith: "Starts With",
                         contains: "Contains"
                     }
                 }
             }

         }, {
             field: "DealPricingCompletionDate",
             width: 230,
             title: "DealPricingCompletionDate",
             format: "{0:dd/MM/yyyy}",
             filterable: {
                 ui: "datetimepicker",
                 operators: {
                     date: {
                         gt: "After",
                         lt: "Before",
                         eq: "Equals"
                     },
                     messages: {
                         filter: "Apply",
                         clear: "Clear"
                     }
                 }

             }
         },   
         ],

         change: function () {
             var text = "";
             var grid = this;
             grid.select().each(function () {
                 var dataItem = grid.dataItem($(this));
                 text += "DealNumber: " + dataItem.DealNumber + "\n" + "Issuer: " + dataItem.DealIssuer + "\n" + "Ticker: " + dataItem.Ticker + "\n" + "Type: " + dataItem.DealType + "\n" + "Value: " + dataItem.DealValue + "\n" +
                     "Status " + dataItem.DealStatus + "\n" + "DealPricingCompletionDate: " + kendo.toString(dataItem.DealPricingCompletionDate, "dd/MM/yyyy");
             });
             alert(text);
         },
         height: 700
     }).data("kendoGrid");

2 个答案:

答案 0 :(得分:3)

更改事件被触发两次,由于alert()被绑定到更改事件,它也会弹出两次。

看看change event documentation。它是“当用户选择网格中的表格行或单元格时触发。”

也许它被解雇了两次,一次是针,一次是针对细胞?虽然我看到你有selectable: "row"所以它应该只为该行开火。

将您的更改事件更新为change: function (e) { console.log(e); },并在调试控制台中查看其输出内容。这将为您提供有关触发它的元素的提示。

然后,您可以尝试将e.preventDefault();添加到您的更改事件中,以阻止其他任何事件被触发。

答案 1 :(得分:1)

经过长时间的延迟,它现在已被破解。 我所要做的就是使用SetTimeOut Method by timeout为0表示不指定任何时间参数。 所以固定代码是

    function onRowSelected(e) {
        e.preventDefault();
        console.log(e.sender);
        var text = "";
        var grid = this;
        grid.select().each(function () {
            var dataItem = grid.dataItem($(this));
            text += "DealNumber: " + dataItem.DealNumber + "\n" + "Issuer: " +
                dataItem.DealIssuer + "\n" + "Ticker: " + dataItem.Ticker + "\n" + "Type: " + dataItem.DealType + "\n" + "Value: " + dataItem.DealValue + "\n" +
                "Status " + dataItem.DealStatus + "\n" + "DealPricingCompletionDate: " + kendo.toString(dataItem.DealPricingCompletionDate, "dd/MM/yyyy");
        });
        setTimeout(function () { alert(text) },0);

    }