Jquery mobile 在击倒js中,按键事件有时只起作用?

Jquery mobile 在击倒js中,按键事件有时只起作用?,jquery-mobile,knockout.js,single-page-application,Jquery Mobile,Knockout.js,Single Page Application,我已经将敲除绑定设置为具有按键事件,因为我希望在输入字段上检测Enter键事件。它只在某些时候起作用,而不是一直起作用 代码: 数据成功来自api,但文本输入有时有效,有时无效。如果我们刷新页面,那么它工作正常。我不知道为什么。请帮助我的朋友将自定义绑定处理程序添加到绑定中- ko.bindingHandlers.returnAction = { init: function (element, valueAccessor, allBindingsAccessor, viewModel)

我已经将敲除绑定设置为具有按键事件,因为我希望在输入字段上检测Enter键事件。它只在某些时候起作用,而不是一直起作用

代码:


数据成功来自api,但文本输入有时有效,有时无效。如果我们刷新页面,那么它工作正常。我不知道为什么。请帮助我的朋友

将自定义绑定处理程序添加到绑定中-

ko.bindingHandlers.returnAction = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var value = ko.utils.unwrapObservable(valueAccessor());

        $(element).keydown(function (e) {
            if (e.which === 13) {
                value(viewModel);
            }
        });
    }
};
在您的视图中,将您的元素更改为使用绑定处理程序,并将其值直接绑定到可观察对象。我还添加了一个搜索现在。。。span,我不确定您当前使用的是什么元素,但看看它是如何仅在可观察的isSearching可见时才可见的。。。避免从视图模型中执行DOM操作-

<div><span data-bind="visible: isSearching">Searching now...</span></div>
<input id="txtSearch" data-bind="value: searchText, returnAction: sendSearch" />
现在,当用户按下搜索输入框内的enter键时,它将启动searchSend并执行AJAX调用。这里不需要尝试捕捉,因为AJAX将返回成功或失败。如果有问题,你会得到警告,如果没有,生活会继续。如果成功了,可以随意在那里抛出一个console.log来查看您得到了什么

下一步是什么?

请记住,您没有充分利用Knockout.js的价值。jQuery有一种方法,它与knockout有很大不同。目标是从视图模型中删除尽可能多的直接DOM操作,并让视图自行处理。尽可能利用本机提供的绑定来隐藏和显示对象、绑定单击事件和按钮单击,以及您可以找到的任何其他绑定


jQuery的用途很好,但这种方法有点过时,特别是如果您使用的是像Knockout这样的绑定库,它可以更有力地解决这些问题。

我无法确切地告诉您为什么它会变得古怪,但我建议您为enter-press创建一个自定义绑定处理程序来触发事件,并单独调试该事件。若要设置绑定处理程序,请检查此问题-是否可以重新排序此代码并使其正常工作?我将尝试发布您问题的答案,但请注意,我不使用jQuery mobile,因此我无法确保代码可为您编译,您可能需要对其进行调整。好的,我已完成我的工作回答,它应该适合你的需要…我添加了你的代码。但是它停止了其他的事情。。它在下面显示错误“未捕获的SyntaxError:输入意外结束”。它为什么会出现?我可以知道原因吗?如何解决这个问题?
ko.bindingHandlers.returnAction = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var value = ko.utils.unwrapObservable(valueAccessor());

        $(element).keydown(function (e) {
            if (e.which === 13) {
                value(viewModel);
            }
        });
    }
};
<div><span data-bind="visible: isSearching">Searching now...</span></div>
<input id="txtSearch" data-bind="value: searchText, returnAction: sendSearch" />
self.searchText = ko.observable();
self.isSearching = ko.observable(false);

self.sendSearch= function (sender) {
    isSearching(true);  // Show your searching now text
    $.ajax({
        url: 'http://localhost/api/contacts/search',
        type: 'GET',
        dataType: 'jsonp',
        data: { Text: searchText() },
        context: this,
        success: function (result) {   
             self.Contacts(result);                        
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(errorThrown);
        },
        complete: function () {
            $('#ListSearch').listview('refresh');
            isSearching(false);  // Hide searching now...
        }
    });
}