ake*_*eth 10 html javascript knockout.js
我有一个带有onkeypress事件的html文本框,可以发送如下信息
<input type="text" data-bind="attr:{id: 'txtDim' + $data.userID, onkeypress: $root.sendMsg('#txtDim' + $data.userID, $data)}" />
Run Code Online (Sandbox Code Playgroud)
我已经编写了javascript函数来发送消息,同时按下面输入按钮:
self.sendMsg = function (id, data) {
$(id).keydown(function (e) {
if (e.which == 13) {
//method called to send message
//self.SendDIM(data);
}
});
};
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我必须按2次输入按钮发送消息.1:按键调用self.sendMsg 2:按键调用self.SendDIM
但我只需要在一个按键上发送消息.它只能在普通的javascript中完成.但我需要viewmodel数据,因此应用于data-bind.所以不能正常工作.
Ste*_*rex 17
您需要按两次输入的原因是您的sendMsg方法仅将keydown事件处理程序附加到事件.然后在第二个按钮上调用此处理程序.
更好的方法是编写一个自定义绑定处理程序,它附加事件处理程序并通过视图模型:
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);
}
});
}
};
Run Code Online (Sandbox Code Playgroud)
我已经将下面的按键事件添加到文本框中
<input type="text" data-bind="attr:{id: 'txtGoalsheetNote' + $data.userID}, event:{keypress: $root.SendMsg}" />
Run Code Online (Sandbox Code Playgroud)
在javascript中,我通过将事件作为参数添加了以下方法
self.SendMsg= function (data, event) {
try {
if (event.which == 13) {
//call method here
return false;
}
return true;
}
catch (e)
{ }
}
Run Code Online (Sandbox Code Playgroud)
然后它的工作.
| 归档时间: |
|
| 查看次数: |
7643 次 |
| 最近记录: |