按Enter键时,Knockout按键不会绑定

时间:2016-11-18 18:05:41

标签: jquery knockout.js

我正在尝试在用户使用knockout输入时启用搜索功能 但是当我在文本框中输入时,淘汰不会绑定来自textbox的值

<!DOCTYPE html>
<html>
<head>
    <title>Knockout</title>
    <meta charset="utf-8" />
</head>
<body>
    <div id="view">
        <input type="text" placeholder="Press enter to bind" data-bind="value:textboxValue"  data-function="pressEnterToBind"/> 
    </div>
</body>
</html>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="http://knockoutjs.com/downloads/knockout-3.4.1.js"></script>
<script>
    $(document).ready(function () {
        window.vm = (function ($, ko) {
            var $view = $("#view");
            var textboxValue = ko.observable();

            var onPressEnter = function (e) {
                if (e.which === 13) {
                    alert(textboxValue());
                }
            },
            init = function () {
                $view.on('keypress', '[data-function="pressEnterToBind"]', onPressEnter);
            };

            init();

            return {
                textboxValue: textboxValue
            };
        }($, ko));

        window.vm.binding = (function (ko, vm) {
            ko.applyBindings(vm);
        })(ko, window.vm);
    });
</script>

警报的结果未定义&#39;

2 个答案:

答案 0 :(得分:0)

我通过两种方式达到目标

首先:将“valueUpdate:'afterkeydown'”添加到敲除绑定

<input type="text" placeholder="Press enter to bind" data-bind="value:textboxValue,valueUpdate: 'afterkeydown'"  data-function="pressEnterToBind"/>  

OR

第二:“模糊()”和“焦点()”再次在目标控制上

            var onPressEnter = function (e) {
                if (e.which === 13) {
                    $(e.target).blur(); // to refresh ko binding
                    alert(textboxValue());
                    $(e.target).focus(); // to refresh ko binding
                }
            },

答案 1 :(得分:0)

textInput绑定可以解决问题。

KnockoutJS文档:

  

与值绑定不同,textInput为DOM提供所有类型用户输入的即时更新,包括自动完成,拖放和剪贴板事件。