【问题标题】:Unable to access current item in event binding in knockoutjs无法访问knockoutjs中的事件绑定中的当前项目
【发布时间】:2016-12-15 15:15:36
【问题描述】:

我正在尝试在按键事件绑定的处理函数中获取输入元素的值

<input data-bind="textInput: searchInput, event: { keypress: filterList }" type="text" placeholder="Search..">

var ViewModel = function() {
    self.searchInput = ko.observable("");
    self.filterList = function(input) {
        console.log(input);
        return true;
    }
};

这不是打印输入字段的值,而是打印 ViewModel 对象。
如何在 filterList 处理函数中获取每个按键输入字段的值?

【问题讨论】:

    标签: javascript html knockout.js


    【解决方案1】:

    由于您将input 存储到self.searchInput 并且它是observable,因此您可以直接在filterList 处理程序中使用它 -

    var ViewModel = function() {
    var self = this;
        self.searchInput = ko.observable("");
        self.filterList = function() {
            console.log(self.searchInput());
            return true;
        }
    };
    

    Fiddle

    另外,我想说将keypress 事件更改为keyup,因为它可以提供更准确的结果(至少在我的小提琴中)。

    <input data-bind="textInput: searchInput, event: { 'keyup': filterList }" type="text" placeholder="Search..">
    

    【讨论】:

    • 是的,但是它给出了输入的先前值而不是当前值,例如,如果有s 并且我添加a,它将打印s,然后如果我添加@987654333 @,它将打印sa
    • textInput 绑定具有各种奇特的事件组合逻辑,以确保注册对输入值的所有更改。我建议反对也绑定到keyup 事件。最好在您的视图模型中订阅searchInput。您甚至可以开箱即用地限制/速率限制您的过滤器逻辑!
    • 我宁愿为此使用自定义绑定处理程序。我已经实现了通过它处理的类似过滤器功能......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2019-09-19
    • 1970-01-01
    • 2022-12-08
    • 2011-10-06
    • 2019-05-14
    相关资源
    最近更新 更多