jQuery在单击事件完成后执行操作

时间:2014-02-13 09:44:59

标签: jquery events deferred

在页面内部有两个按钮,一个用于从服务器检索文档(pdf),另一个用于提交当前表单的“下一个”按钮。

我要取消绑定“下一步”按钮,直到用户完成下载文件。

我有以下功能:

$.fn.unbindItem = function(){
   return this.each(function(){
      $(this).css('opacity', 0.5).css('cursor', 'not-allowed').unbind('click');
   });
};

$.fn.reBindItem = function(){
   return this.each(function(){
      $(this).css('opacity', 1).css('cursor', 'pointer').bind('click');
   });
};

然后,当文档准备就绪时:

$(document).ready(function(){
  ...
  nextButton.unbindItem();

  //TEST 1
  docButton.click(function(e){
    $.when(e).done(function(){ nextButton.reBindItem(); });
  });

  //TEST 2
  $.when(docButton.click()).done(function(){ nextButton.reBindItem(); });

  //TEST 3
  docButton.click().queue(function(){
     nextButton.reBindItem();
     $(this).dequeue();
  });

  //TEST 4
  docButton.click().done(function(){ nextButton.reBindItem(); });
});

显然,我没有同时测试所有案例,而是一个接一个地测试。

每个TEST的结果是:

  • 测试1:nextButton再次绑定自己,但文档管理器窗口
  • 后可能会提示
  • 测试2:docButton点击功能是ASAP启动,然后是文件 经理窗口可能会在nextButton重新绑定后提示
  • TEST 3:不起作用
  • 测试4:有效,但文档管理器在nextButton重新加入后提示

1 个答案:

答案 0 :(得分:1)

$.fn.unbindItem = function(){
   return this.each(function(){
      $(this).attr("disabled","disabled");
   });
};

$.fn.reBindItem = function(){
   return this.each(function(){
      $(this).removeAttr("disabled");
   });
};