Я борюсь с проблемой, использующей knockoutjs в первый раз.
У меня есть текстовое поле для строки поиска:
<input type="text" data-bind="value: searchString" id="searchText">
и кнопка:
<span data-bind="click: searchButton" id="searchBtn"></span>
оба связаны с помощью нокаута, используя следующий скрипт:
function ViewModel() {
var self = this;
//-----
self.searchButton = function () {
if (self.searchString() != null && self.searchString().length > 3) {
$.ajax({
type: "post",
contentType: "application/json",
url: "./SearchCustomer/",
data: "{'searchString':'" + self.searchString() + "'}",
error: function (xhr, status, error) {
baseShowError("Error");
},
success: function (response) {
var receivedResponse = JSON.parse(response);
if (receivedResponse.Success) {
ko.mapping.fromJS(receivedResponse.Result, {}, self);
} else {
baseShowError("customer not found");
}
}
});
}
};
});
$(function () {
var jsonModel = '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model, new Newtonsoft.Json.Converters.IsoDateTimeConverter()))';
var myViewModel = ko.mapping.fromJSON(jsonModel, {}, new ViewModel());
ko.applyBindings(myViewModel);
});
Теперь я хочу поймать ввод в текстовом поле с помощью скрипта:
$(document).ready(function () {
$('#searchText').keypress(function (e) {
if (e.which == 13) {
...........
}
});
});
Только проблема заключается в том, что вводить вместо точек. Я читал о ненавязчивой обработке событий, но ничто из этого не показалось мне полезным. Может ли кто-нибудь дать мне подсказку?
Хотя улавливание "входа" кажется правильным решением, ответ намного проще.
вместо привязки клика к кнопке вы можете привязать представление к форме, помещенной над двумя элементами
Решение: ViewModel остается прежним.
<form data-bind="submit: seachButton">
<input type="text" data-bind="value: searchString">
<span data-bind="click: searchButton"></span>
</form>
Как видите, привязка данных добавляется в новый тег формы.
(Обычно, если кнопка действительно является кнопкой типа ввода, вы, вероятно, можете удалить привязку кликов, как хорошо..... не проверено)
Не могли бы вы просто вызвать свой метод searchButton
, например ViewModel.searchButton();
?