javascript - 使用 Promise jquery 自定义确认按钮

标签 javascript jquery promise

我正在尝试在 jquery 中创建一个自定义确认弹出窗口,我制作了一个函数,当请求时使用文本和两个按钮显示自定义警报:确定,取消。:

function showprompt(content){
   $("#confirm").css("display","block");
   $("#msg").text(content); 
}

问题是我如何才能等到按钮单击并返回结果,如果可以则返回 true?我想我需要使用 Promise 和 defer。我该怎么办?

我不喜欢使用带有插件 JQuery UI - 对话框的预创建确认按钮

最佳答案

对于此类功能来说,Promise 是一个好主意(它们不仅仅适用于异步!)。假设 #confirm 中有两个按钮,分别称为 #ok#cancel

它看起来是这样的:

function showprompt(content) {
   var dfd = $.Deferred();

   $('#confirm').css('display','block')
   $('#msg').text(content);

   $('#confirm')
     //turn off any events that were bound to the buttons last 
     //time you called showprompt()
     .off('click.prompt') 

      //resolve the deferred
     .on('click.prompt','#ok',function() { dfd.resolve(); }) 

      //reject the deferred
     .on('click.prompt','#cancel',function() { dfd.reject(); });

   //return a the deferred's promise
   return dfd.promise();
}

然后你可以像这样使用它:

showprompt(content).then(
   function() { alert('You clicked ok'); }, //promise resolved
   function() { alert('You clicked cancel'); }, //promise rejected
);

关于javascript - 使用 Promise jquery 自定义确认按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34845351/

相关文章:

javascript - Promise 中的 JS Promise

jQuery nestedsortable插件默认添加css

javascript - 使用 jQuery 确定 'Revealing Module Pattern' 模块的范围

javascript - 为什么在 `then` 内返回 Promise.resolve() 会导致创建两个 promise 而不是一个?

javascript - 无法读取未定义的属性 '0' -- JavaScript

jquery - 为什么这个 jQuery 脚本在 Chrome 和 Opera 中不起作用,而在 Firefox、IE 和 Safari 中却完全正常?

javascript - 如何在for循环中组织promise并在javascript中的函数之间传递参数?

javascript - 在 Angular 中导入和使用外部 JS 库

javascript - 在 RTL 模式下获取可滚动 DIV 视口(viewport)的更好方法?

Javascript - 在数组中查找最频繁的数字,即使有两个