2013-04-20 27 views
6

Ngắn câu chuyện ngắn, tôi muốn cho phép người dùng nhấn Enter trên một yếu tố đầu vào và phương pháp nhất định trong viewmodel của tôi được gọi. Đây là đầu vào html của tôi:Knockout sự kiện ràng buộc cho đầu vào bấm phím gây ra hành vi kỳ lạ

<input id="searchBox" class="input-xxlarge" type="text" data-bind="value: searchText, valueUpdate: 'afterkeydown', event: { keypress: $parent.searchKeyboardCmd}"> 

và đây là phương pháp của tôi trong vm:

searchKeyboardCmd = function (data, event) { if (event.keyCode == 13) searchCmd(); }; 

tất cả mọi thứ hoạt động tốt và searchCmd được gọi khi tôi nhấn enter trên đầu vào, nhưng vấn đề là tôi có thể gõ không có gì trong đầu vào, tức là mọi thứ tôi nhập vào đầu vào đều bị bỏ qua. Cảm ơn rất nhiều về sự trợ giúp của bạn.

Trả lời

20

Theo tài liệu KO, bạn phải trả lại true từ trình xử lý sự kiện nếu bạn muốn hành động mặc định tiếp tục.

searchKeyboardCmd = function (data, event) { 
    if (event.keyCode == 13) searchCmd(); 
    return true; 
}; 
+0

Vâng, cảm ơn bạn rất nhiều f_martinez! Nó bây giờ hoạt động hoàn hảo, mặc dù tôi không thấy tại sao điều này lại cần thiết! – Pejman

1

here's một fiddle đó chứng tỏ những gì ur cố gắng làm và cũng thay thế sự kiện 'bấm phím' trong mã ur với KeyUp và xóa $ cha mẹ với chỉ tên hàm trừ khi textfield là bên trong một loop..here loại trực tiếp foreach là mã được sửa đổi bên dưới

<input id="searchBox" class="input-xxlarge" type="text" data-bind="value: searchText, valueUpdate: 'afterkeydown', event: { keyup: searchKeyboardCmd}" 
+0

Đây là câu trả lời đã giúp tôi, bởi vì nó không deppend trên nhập hoặc keycode == 13 – Sanchitos

2

Đây là mẫu đang hoạt động.

http://jsfiddle.net/tlarson/qG6yv/

<!-- ko with: stuff --> 
    <input id="searchBox" class="input-xxlarge" type="text" 
    data-bind="value: searchText, valueUpdate: 'afterkeydown', 
    event: { keypress: $parent.searchKeyboardCmd}"> 
<!-- /ko --> 

Và javascript:

var stuffvm = function(){ 
    var self = this; 

    self.searchText = ko.observable(); 
}; 

var vm = function() { 
    var self = this; 

    self.stuff = new stuffvm(); 

    self.searchCmd = function() { 
     console.log("search triggered"); 
    }; 

    self.searchKeyboardCmd = function (data, event) { 
     if (event.keyCode == 13) { 
      self.searchCmd(); 
     } 
     return true; 
    } 
} 

ko.applyBindings(new vm()); 
Các vấn đề liên quan