使用knockoutjs提交绑定在textarea中使用enter键提交表单

时间:2014-08-28 10:46:15

标签: knockout.js submit enter

我想使用提交绑定提交表单,但它不起作用。在我的形式我只有textarea字段。我怎样才能做到这一点。当我按下回车键时,它只是到文本区域的下一行,但不提交表格。我正在使用phonegap开发我的移动应用程序,因此输入密钥代码13将无法正常工作。这是我的表格。

<form data-bind="submit:EditQuestion" method="post" data-ajax="false">
    <textarea placeholder="Answer" data-bind="value:Answer"></textarea>
</form>

Fiddle Demo

1 个答案:

答案 0 :(得分:0)

如果无法从手机中检测到ENTER键,您可以添加一个自定义绑定处理程序来监视<textarea>,然后在看到ENTER字符时调用EditQuestion函数。然而,可能不是最优雅的解决方案。

修改<textarea>以包含新的绑定处理程序。我将其命名为textAreaEditQuestion

<textarea placeholder="Answer" data-bind="value:Answer, textAreaEditQuestion:Answer"></textarea>

这是自定义绑定处理程序(每100毫秒轮询一次):

ko.bindingHandlers.textAreaEditQuestion = {
    init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
        var handle = setInterval(function () {
            var index = element.value.indexOf('\n');
            if (index !== -1) {
                // we found an ENTER key so stop monitoring
                clearInterval(handle);
                // grab the value minus the ENTER key
                var value = element.value.substr(0, index);
                // set the value in your ViewModel
                valueAccessor()(value);
                // call the EditQuestion function
                viewModel.EditQuestion();
            }
        }, 100);
    }
};