Jquery mobile 在击倒js中,按键事件有时只起作用?
我已经将敲除绑定设置为具有按键事件,因为我希望在输入字段上检测Enter键事件。它只在某些时候起作用,而不是一直起作用 代码: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)
数据成功来自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...
}
});
}