按下Enter键时调用功能 [英] Call a function on enter key press
问题描述
按下回车键时如何使用敲除.js调用函数.这是下面的代码.
ko.bindingHandlers.enterkey = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var inputSelector = 'input,textarea,select';
$(document).on('keypress', inputSelector, function (e) {
var allBindings = allBindingsAccessor();
$(element).on('keypress', 'input, textarea, select', function (e) {
var keyCode = e.which || e.keyCode;
if (keyCode !== 13) {
alert('a');
return true;
}
var target = e.target;
target.blur();
allBindings.enterkey.call(viewModel, viewModel, target, element);
alert('b');
return false;
});
});
}
};
ko.applyBindings(viewModel);
HTML
<input type="text" data-bind="value:sendMessageText, enterkey: sendMessage" />
ViewModel
function contactsModel(){
var self = this;
self.jid=ko.observable();
self.userName=ko.observable();
self.sendMsgText=ko.observable();
self.sendMessage = function(){
if(self.sendMessageText() == '' )
alert("Enter something in input field");
else{
var message = {
to : self.userName(),
message : self.sendMsgText()
}
self.sentMessages.push(message);
sendMessage(message);
}
}
}
任何关于此处错误之处的想法,或有关更好方法的建议.
当您创建自己的基因剔除bindingHandler时,它的使用方式与其他bindingHanlders相同,例如:data-bind="text: myvalue"
因此您的HTML需要看起来像这样
<input type="text" data-bind="value:sendMessageText, valueUpdate: 'afterkeydown', enterkey: sendMessage" />
要添加的重要绑定是valueUpdate: 'afterkeydown'
绑定.如果没有此绑定,则在enterkey
绑定之前,当用户在输入中键入文本并按击中输入时,不会引发onblur事件.如果在enterKey
调用的操作中访问输入的值,则可观察的结果将返回意外的值,而不是当前文本.
编辑
这就是我以前在其他项目上使用过的内容.
JsFiddle演示
ko.bindingHandlers.enterkey = {
init: function (element, valueAccessor, allBindings, viewModel) {
var callback = valueAccessor();
$(element).keypress(function (event) {
var keyCode = (event.which ? event.which : event.keyCode);
if (keyCode === 13) {
callback.call(viewModel);
return false;
}
return true;
});
}
};
How to call a function using knockout.js when enter key is pressed.. here is my code below.
ko.bindingHandlers.enterkey = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var inputSelector = 'input,textarea,select';
$(document).on('keypress', inputSelector, function (e) {
var allBindings = allBindingsAccessor();
$(element).on('keypress', 'input, textarea, select', function (e) {
var keyCode = e.which || e.keyCode;
if (keyCode !== 13) {
alert('a');
return true;
}
var target = e.target;
target.blur();
allBindings.enterkey.call(viewModel, viewModel, target, element);
alert('b');
return false;
});
});
}
};
ko.applyBindings(viewModel);
HTML
<input type="text" data-bind="value:sendMessageText, enterkey: sendMessage" />
ViewModel
function contactsModel(){
var self = this;
self.jid=ko.observable();
self.userName=ko.observable();
self.sendMsgText=ko.observable();
self.sendMessage = function(){
if(self.sendMessageText() == '' )
alert("Enter something in input field");
else{
var message = {
to : self.userName(),
message : self.sendMsgText()
}
self.sentMessages.push(message);
sendMessage(message);
}
}
}
Any idea's about what is wrong here or suggestions for better approach.
When you create your own knockout bindingHandler, it is used in the same way as the other bindingHanlders eg: data-bind="text: myvalue"
so your HTML will need to look something like this
<input type="text" data-bind="value:sendMessageText, valueUpdate: 'afterkeydown', enterkey: sendMessage" />
An important binding to add is the valueUpdate: 'afterkeydown'
binding. Without this binding when a user types text in the input and hits enter the onblur event is not raised prior to enterkey
binding. This results in the observable returning an unexpected value and not the current text if the input's value is accessed in an action invoked by enterKey
.
Another Look at Custom Bindings for KnockoutJS
EDIT
This is what I have used previously on other projects.
JsFiddle Demo
ko.bindingHandlers.enterkey = {
init: function (element, valueAccessor, allBindings, viewModel) {
var callback = valueAccessor();
$(element).keypress(function (event) {
var keyCode = (event.which ? event.which : event.keyCode);
if (keyCode === 13) {
callback.call(viewModel);
return false;
}
return true;
});
}
};
这篇关于按下Enter键时调用功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!