如果用户在输入上按Enter,则取消knockout ratelimit extender

时间:2015-03-10 16:40:40

标签: javascript jquery ajax knockout.js

我向服务器发送一个AJAX请求,其中包含我想要的服务器页码。

我使用输入框从用户那里获得此页码。

我使用此代码:

   (function($) {
     $(function() {
         // Overall viewmodel for this screen, along with initial state
         function CartableViewModel(totalItems) {
           var self = this;
           // Editable data
           self.data = ko.observable();
           self.pageIndex = ko.observable(1).extend({
             rateLimit: {
               method: "notifyWhenChangesStop",
               timeout: 1500
             }
           });


           ko.computed(function() {
             Mostafa.myApp.Order.Cartable("CreatorID=23 & (CreatorID=23|CreatorID>23)", self.pageSize(), function(data) {
               self.data(data);
             });
           });
         });
     }
     Mostafa.myApp.Order.CartableViewModel = new CartableViewModel();
     ko.applyBindings(Mostafa.myApp.Order.CartableViewModel);
   });
   $("#form_page_select").on("submit", function() {
   return false;
   });
   })(jQuery);

我的HTML是:

<form id="form_page_select">
  <input type="number" id="input_page_select" min="1" data-bind='value: pageIndex, valueUpdate: ["input", "keypress"]' />
</form>

实际上我用另一个java脚本方法发送这个AJAX请求,它的名字是“Mostafa.myApp.Order.Cartable()”,它运行正常。

我的问题是:如何在超时后发送此Ajax调用,但是如果用户在此输入字段上按Enter键。

非常感谢,

1 个答案:

答案 0 :(得分:2)

您可以使用来自knockoutjs的subscribe来查找您正在寻找的功能。

相同的小演示

function model(){
    var self = this;
    self.pageIndex = ko.observable(5).extend({ rateLimit: 1500 });
    self.pageIndex.subscribe(function(newValue) {
      alert(newValue);
      //Call here your ajax call
      //Subscribe will be called on every change of your PageIndex
    });
};
var mod = new model();
ko.applyBindings(mod);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.1.0/knockout-min.js"></script>
<input type="number" id="input_page_select" min="1" data-bind='value: pageIndex, valueUpdate: ["input", "keypress"]' />