KendoUI ComboBox更改事件运行多次

时间:2017-08-01 18:56:12

标签: javascript kendo-ui

我有一个KendoUI ComboBox的MVC控件,它没有提前设置更改事件。在渲染时,页面控制器设置&填补它的'自己的变革事件。

奇怪的是,这个事件被称为TWICE:

  • 当我更改所选项目时
  • 当我点击控件时

enter image description here

问:我做错了什么? 问:我们应该如何在现有的Kendo ComboBox上覆盖更改事件?

MVC CONTROL:
如您所见,我不是在这里定义任何客户端事件......

@(Html.Kendo().ComboBox()
  .Name("ddlTechnician")
  .Filter("contains")
  .Placeholder("Select Technician...")
  .DataTextField("Text")
  .DataValueField("Value")
  .BindTo(new List<SelectListItem>() {
      new SelectListItem() { Text = "Frank", Value = "1" },
      new SelectListItem() { Text = "Suzie", Value = "2" },
      new SelectListItem() { Text = "Ralph", Value = "3" }
  })
  .Suggest(true)
  .HtmlAttributes(new { style = "width:300px;" }))

PAGE CONTROLLER:
而且,我只在这里定义事件ONCE。我还确认事件在页面控制器

中设置之前尚未触发
$(document).ready(function () {

    var PageController = (function ($) {

        function PageController(options) {
            var that = this,
                empty = {},
                dictionary = {
                    elements: {
                        form: null
                    },
                    instances: {
                        ddlTechnician: null
                    },
                    selectors: {
                        form: 'form',
                        ddlTechnician: '#ddlTechnician'
                    }
                };

            var initialize = function (options) {
                that.settings = $.extend(empty, $.isPlainObject(options) ? options : empty);

                dictionary.elements.form = $(dictionary.selectors.form);

                // Objects
                dictionary.instances.ddlTechnician = $(dictionary.selectors.ddlTechnician, dictionary.elements.form).data('kendoComboBox');

                // Events
                dictionary.instances.ddlTechnician.setOptions({ change: that.on.change.kendoComboBox });
            };

            this.settings = null;
            this.on = {
                change: {
                    kendoComboBox: function (e) {

                        // This is getting called MULTIPLE TIMES
                        console.log('kendoComboBox RAN');
                    }
                }
                }
            };

            initialize(options);
        }

        return PageController;
    })(jQuery);

    var pageController = new PageController({});
});

1 个答案:

答案 0 :(得分:3)

当我通过setOptions设置事件处理程序时,我能够在Kendo JQuery Combobox上重现您的问题,这在呈现窗口小部件后不是推荐的方式。相反,你应该使用&#34; bind&#34;方法如documentation's example for change events

所示

尝试将您设置事件处理程序的代码行更改为:

dictionary.instances.ddlTechnician.bind("change", that.on.change.kendoComboBox);

这是一个显示差异的道场:http://dojo.telerik.com/iyEQe

希望这有帮助。