Knockout перехватывать ввод в текстовое поле, чтобы достичь так же, как с кнопкой

0

Я борюсь с проблемой, использующей 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) {
                    ...........
                }
            });
        });

Только проблема заключается в том, что вводить вместо точек. Я читал о ненавязчивой обработке событий, но ничто из этого не показалось мне полезным. Может ли кто-нибудь дать мне подсказку?

Теги:
knockout.js

2 ответа

-2
Лучший ответ

Хотя улавливание "входа" кажется правильным решением, ответ намного проще.

вместо привязки клика к кнопке вы можете привязать представление к форме, помещенной над двумя элементами

Решение: ViewModel остается прежним.

<form data-bind="submit: seachButton">
    <input type="text" data-bind="value: searchString">
    <span data-bind="click: searchButton"></span>
</form>

Как видите, привязка данных добавляется в новый тег формы.

(Обычно, если кнопка действительно является кнопкой типа ввода, вы, вероятно, можете удалить привязку кликов, как хорошо..... не проверено)

  • 0
    Этот ответ расстраивает меня. Вы «решили» проблему, введя ненужный дополнительный элемент HTML. И теперь у вас есть два пути для обработки событий (они нажимали ввод где-то в вашей форме? Или они нажимали кнопку «searchButton»)
0

Не могли бы вы просто вызвать свой метод searchButton, например ViewModel.searchButton(); ?

  • 0
    попробовал это и попробовал ViewModel (). searchButton (); но без каких-либо успехов.
  • 0
    Вы получаете ошибку JavaScript? Или метод не найден? Более подробно, пожалуйста.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню