【问题标题】:How do I capture if the enter key has been pressed?如果按下回车键,我如何捕获?
【发布时间】:2026-01-27 09:25:01
【问题描述】:

我正在尝试捕获是否已按下回车键并执行搜索。这是搜索页面的视图模型。

(function () 
{
    a.viewModels.userSearch = function (view, params) {
        $view = $(view);
        var self = a.viewModel({
            users: a.collection({
                url: '/admin/Account/SearchUsers',
                query: {
                        SearchText: null
                       }
            }).fetch(),
            setPageIndex: setPageIndex,
            search: search
        });

        $view.keypress(function (e) {
            if (e.keyCode == 13) {
                self.search(e);
            }
        });

        function search(e) {
            self.users.query.rowCount = 0;
            self.users.query.pageIndex = 1;
            self.users.fetch();
        }

        function setPageIndex(e) {
            e.preventDefault();
            self.users.query.set('pageIndex', $(e.currentTarget).data('page-index'));
            self.users.fetch();
        }

        return self;
    }

现在,这行得通。问题是它只有在按 'Enter' 键 2 次后才能工作。好像我错过了与范围相关的东西,但 js 不是我的一杯茶。

如果有任何帮助,这里是我的视图模型函数:

function viewModel(viewModelConfig) {

    var self = kendo.observable($.extend({
        busy: 0,
        resultMessage: null,
        clearResultMessage: clearResultMessage
    }, viewModelConfig));
    self.bind('change', onChange);

    function onChange(change) {
        var errorProp, errorMsg, infoProp, infoMsg;
        if (change.field.endsWith('.busy')) {
            if (self.get(change.field))
                self.set('busy', self.busy + 1);
            else if (self.busy > 0)
                self.set('busy', self.busy - 1);
        }
        else if (change.field.endsWith('.resultMessage')) {
            var data = self.get(change.field);
            self.set('resultMessage', data);
        }
    }

    function clearResultMessage(e)
    {
        if (e) e.preventDefault();
        self.set('resultMessage', null);
        return false;
    }

    return self;
}

【问题讨论】:

    标签: javascript mvvm kendo-ui


    【解决方案1】:

    我的站点上有类似的设置,并且使用 MVVM,只需在元素的 data-bind 属性中添加自定义 enter 绑定,以链接到您希望执行的视图模型中的函数。

    添加自定义活页夹的代码如下:

    kendo.data.binders.widget.enter = kendo.data.Binder.extend({
        init: function(element, bindings, options) {
            kendo.data.Binder.fn.init.call(this, element, bindings, options);
            var binding = this.bindings.enter;
            $(element.element).keyup(function(e) {
                if( e.which === 13 )
                    bindings.get();
            });
        },
        refresh: $.noop
    });
    

    【讨论】:

      最近更新 更多