如何将延迟方法添加到委派事件

时间:2015-04-03 16:49:08

标签: jquery

我正在尝试使用deferreds来处理特定的应用程序。我不确定我是否离开这里,我的策略是错误的,或者我只是忽略了一些基本的东西。

我们说我有一些委派的on事件:

jQuery('#my-element').on('change', 'select,input', Myclass.change);

基本上,我所追求的(或类似的东西)将是:

jQuery('#my-element').on('change', 'select,input', Myclass.change)
    .then(Myclass.next)
    .done(Myclass.done);

如何将这些延迟方法添加到我的基本委派事件中?

1 个答案:

答案 0 :(得分:1)

尝试使用$.Callbacks("once"); Myclass.nextMyclass.done应该被称为"一次"



var callbacks = $.Callbacks("once");
var Myclass = {
  "change" : function(e) {
    // do stuff within `Myclass.change`
    console.log(e.target.value, "change");
    // call `$.when()` with desired argument, e.g.,
    // with `e.target.value` , 
    // passed to `Myclass.next` , `Myclass.done`
    // Note, `.then()` can return different `promise` value
    // `.done()` returns original `promise` value
    callbacks.add(function() {
      return $.when(e.target.value).then(Myclass.next).done(Myclass.done)
    }).fire();

  }
  , "next" : function(value) {
    console.log(value, "next");
    return value
  }
  , "done" : function(value) {
    console.log(value, "done");
  }

};


jQuery('#my-element').on('change', 'select,input', Myclass.change);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div id="my-element">
  <input type="text" />
</div>
&#13;
&#13;
&#13;