2015-05-13 1 views
0

У меня есть привязка к событию на входе поиска типа, это для того, чтобы запустить поиск на стороне сервера и заполнить список по мере ввода пользователем.Неожиданное поведение с KnockoutJS Событие нажатия клавиши на входе

Эта часть в порядке, и я создал пример скелета, используя чистый javascript, когда пришло время интегрироваться в нокаут, я столкнулся с любопытной проблемой.

У меня есть в моем HTML стандарт связывания:

<input data-bind="event:{keypress:ring}" type="text" /> 

Для этого примера моей функции кольца будет просто лог-то при нажатии клавиши:

ring: function (event) { 
      this.triggered(this.triggered() + 1); 
      var msg = "Keypress binding called " + this.triggered() + " time(s)."; 
        console.log(msg); 
       } 

Это все нормально, и никаких проблем с что ..

Проблема в том, что входное значение/строка не обновляется. Оно просто остается пустым, как будто я ничего не нажал ,

Мне любопытно, не хватает ли я какого-то стандартного пересылки Я должен делать? Это ожидаемое поведение? Кажется немного странным для меня.

рабочий пример здесь: JSfiddle

При вводе на вход, ничего не происходит, кроме моей ring функции.

+0

Что вы пробовали? Можете ли вы упростить JSFiddle своей проблемы? Вам нужно использовать KnockOut? Возможный дубликат? – James

+0

Я нахожу этот вопрос трудно поверить, поскольку нет ссылки ни на J no K Pop ...:/ – James

ответ

2

Вам нужно вернуть true из функции обработчика событий, чтобы разрешить действие по умолчанию на входе.

Демо здесь: http://jsfiddle.net/szcuyq13/1/

ring: function (event) { 
     this.triggered(this.triggered() + 1); 
     var msg = "Keypress binding called " + this.triggered() + " time(s)."; 
     console.log(msg); 
     return true; 
    } 

Другими словами, это именно так, как вы уже догадались: вам просто нужно добавить немного больше, чтобы обеспечить «переадресацию по умолчанию» происходит, как вы ожидаете. KO по умолчанию предотвращает действие по умолчанию в обработчике связанных событий и, возвращая true, вы запрашиваете, чтобы действие по умолчанию было завершено. Это описано здесь, под заголовком Примечание 3:

http://knockoutjs.com/documentation/event-binding.html

Это внимание также объясняет, почему KO делает это, что имеет смысл, когда вы думаете об этом с якорей и щелчки.

+0

Спасибо большое! Это точно! – Pogrindis

Смежные вопросы