2013-07-28 51 views
6

Tôi là người mới loại trực tiếp js. Tôi muốn gọi hàm mỗi lần văn bản thay đổi bên trong hộp văn bản. Tôi nghiên cứu abit và thực hiện keyup, keydown và keypress nhưng chúng không hoạt động đúng cách. Nếu ai đó có thể cho tôi một giải pháp hoặc hãy chuyển hướng tôi đến một số tài liệu hữu ích cho kịch bản của tôi. Và nếu có một số loại tài liệu về tất cả các sự kiện (sẵn có và tùy chỉnh) có sẵn trong J loại trực tiếp, điều đó sẽ thực sự hữu ích.Sự kiện knockout.js theo dõi mọi thay đổi văn bản bên trong hộp văn bản đầu vào

Để cụ thể về vấn đề này:

data-bind="value: targetProp, event:{keyup: $parent.changeProp}" 

Và trong Js:

Inside parent: 
    this.changeProp = function() { 
       if (condition..) { 
         do something... 
       } 
      } 

Nó không làm việc với chìa khóa lên. Đối với giải pháp đơn giản, xin vui lòng cho tôi một cái gì đó sẽ cảnh báo độ dài của chuỗi đã được viết bên trong một hộp văn bản (trên mỗi văn bản nhập vào và xóa). Cảm ơn trước.

+0

Trong knockout 3.2 đây chỉ là một oneliner đơn giản. Kiểm tra [câu trả lời này] (http://stackoverflow.com/a/25493308/1090562) –

Trả lời

2

Bạn cũng có thể đăng ký các thay đổi theo cách thủ công.

Hãy chắc chắn rằng targetProp là một quan sát được, và khi xây dựng phụ huynh, đăng ký bằng tay với những thay đổi:

parent.targetProp = ko.observable(originalValue); 

parent.targetProp.subscribe(function(newValue) { 
    alert("The new value is " + newValue); 
}); 

Edit: cho một tùy chọn ràng buộc:

<select data-bind="options: myObservableArray, value: selectedValue"></select> 

trong js :

self.selectedValue = ko.observable(); 

thì:

self.selectedValue.subscribe(function(newValue) { 
    alert("The new value is " + newValue); 
}); 
+0

Cảm ơn @JoanCharmant, điều đó đã giúp ích. Và bạn có thể đề xuất làm thế nào tôi có thể làm nhiệm vụ tương tự trên cập nhật giá trị SelectedIndex hoặc cập nhật giá trị SelectedValue trên tùy chọn ràng buộc? – user79307

+0

@accssharma: xem chỉnh sửa của tôi. Tôi muốn sử dụng một quan sát chuyên dụng cho giá trị đã chọn và đăng ký với nó. –

+0

Cảm ơn @JoanChartmant, tôi cũng đã tìm thấy 'valueUpdate: 'change'' để đăng ký giá trị cập nhật của tùy chọn đã chọn. – user79307

8

Bạn có thể sử dụng valueUpdate: 'afterkeydown' cập nhật mô hình chế độ xem của bạn ngay sau khi người dùng bắt đầu nhập một ký tự.

data-bind="value: targetProp, valueUpdate: 'afterkeydown'" 
+0

Thực ra giá trị đó: targetProp được liên kết bên trong một foreach và giá trị của nó là động bên trong parent. Bởi năng động, tôi có nghĩa là số lượng các mục (targetProp) có thể được thêm vào và loại bỏ và tôi muốn theo dõi các văn bản của mỗi mục được tạo động. Vì vậy, tôi nên thực hiện giải pháp của bạn bên trong phụ huynh và tôi ít bối rối như thế nào? Tôi hiểu làm thế nào nó cập nhật giá trị, nhưng tôi bây giờ bối rối với cách tôi có thể theo dõi nó bên trong một sự kiện bên trong một phụ huynh foreach. – user79307

+0

@accssharma Bạn có thể đăng thêm chi tiết và mã trong câu hỏi không? Nó không phải là rất rõ ràng những gì bạn đang cố gắng để làm. –

+0

Cảm ơn các bạn, tôi đã hoàn thành nó bằng cách đăng ký giá trị cập nhật bên trong giá trị gốc mà tôi đã bỏ lỡ. :) – user79307

8

Hoặc bạn có thể sử dụng textInput ràng buộc từ mới nhất KO 3,2

<input data-bind="textInput: userName" />

Ngoài cập nhật trực tiếp, nó xử lý một cách chính xác cắt/dán, kéo, autocomplete.

0

Nếu bạn muốn tính toán theo thời gian thực, khi người đó đang nhập, bạn có thể thực hiện việc này.

HTML

<input type="text" id="description" class="form-control" maxlength="255" 
data-bind="value:description, event:{keyup:calcDescriptionCount}"> 
<br> 
<span data-bind="text:descriptionCount"></span> charactors left. 

ViewModel JS

self.description = ko.observable(""); 
self.descriptionCount = ko.observable(255); 
self.calcDescriptionCount = function(){ 
    this.descriptionCount(255 - $("#description").val().length); 
};