获取嵌套点击功能的结果

时间:2018-06-20 21:00:22

标签: javascript

是否可能是这样的?

Integer

因此,点击add(random.nextInt(100))时,我需要等待,同时点击/etc/sysconfig/flanneld FLANNEL_ETCD_ENDPOINTS="http://<master ip>:2379" FLANNEL_ETCD_PREFIX="/kube-centos/network" $('#btna').click(function(){ console.log(abc()); }) function abc() { $('#btnb').click(function(){ var result = false; }); $('#btnc').click(function(){ var result = true; }); return result; } 并将结果写入控制台。

有帮助吗?

2 个答案:

答案 0 :(得分:2)

使用Promises的其他方法,它将以特定的顺序运行,以等待上一次单击,但第一个按钮除外( $btna

const $btna = document.getElementById('btna');
const $btnb = document.getElementById('btnb');
const $btnc = document.getElementById('btnc');


function executeListener(btn ){
  return new Promise(function(resolve, reject) {
    btn.addEventListener("click" , function(){
      let jsonReturn = {
        action : "click" ,
        button : btn
      }
      resolve(jsonReturn)
    });
  })
}
executeListener($btna)
.then(function(btnaSuccess) {
  console.log("click btna");
  return executeListener($btnb)
}).then(function(btnbSuccess){
  console.log("click btnb");
  return executeListener($btnc);
}).then(function(btncSuccess){
  console.log("click btnc")
  console.log("Chispas");
})
<button id="btna">btna</button>
<button id="btnb">btnb</button>
<button id="btnc">btnc</button>

此外,您可以使用Promise.all

const $btna = document.getElementById('btna');
const $btnb = document.getElementById('btnb');
const $btnc = document.getElementById('btnc');


function executeListener(btn ){
  return new Promise(function(resolve, reject) {
    btn.addEventListener("click" , function(){
      let jsonReturn = {
        action : "click" ,
        button : btn
      }
      resolve(jsonReturn)
    });
  })
}
Promise.all([
executeListener($btna), 
executeListener($btnb),
executeListener($btnc)])
.then(values => { 
  console.log("resolve all clicks");  
  console.log("Chispas")
  
  

});
<button id="btna">btna</button>
<button id="btnb">btnb</button>
<button id="btnc">btnc</button>

答案 1 :(得分:1)

假设您要等待所有所有按钮被单击(对于您接受的答案,情况似乎是如此),并假设您正在使用ECMA 2017,则可以使用更现代的async / await模式。

const btna = $("#btna");
const btnb = $("#btnb");
const btnc = $("#btnc");

async function handler(btn) {
   return new Promise((resolve) => {
     btn.on("click", () => {
        resolve(`clicked ${btn.attr("id")}`);
     });
   });
}

(async () => { 
  let values = await Promise.all([handler(btna), handler(btnb), handler(btnc)]);
  console.log(values); 
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btna">btna</button>
<button id="btnb">btnb</button>
<button id="btnc">btnc</button>

不过根据您的问题,听起来您不想等到单击所有按钮。您只想在btnb之后单击btnabtnc之后单击btna时记录不同的值。在这种情况下,您根本不需要承诺,而可以做到这一点:

const btna = $("#btna");
const btnb = $("#btnb");
const btnc = $("#btnc");

btna.click(() => {
    btnb.on("click", clickHandler);
    btnc.on("click", clickHandler);
});

function clickHandler() {
  console.log(this.id);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btna">btna</button>
<button id="btnb">btnb</button>
<button id="btnc">btnc</button>