保持函数调用,直到单击

时间:2015-08-20 22:54:13

标签: javascript jquery

现在我处理有点棘手,因为我有一个函数生成一个数组,我想在点击一个按钮后传递给另一个函数。为了让你明白这一点,我正在谈论这样的事情:

function d(){
...
while(true){
  m.push([x,y]);
  ...//we have finished pushing things into the array
}
  if(false){
  //here I have to somehow pause the function and make it wait until 
  $('#idofabutton').data('clicked');
  //and after this step has been passed, to call another function passing it   the generated array...
function mo(m);
 }
}

如果您有任何建议,请评论我对任何想法持开放态度,但我更倾向于坚持这个程序结构,而不是改组它或重写它,因为它对我来说很难把它带到原来的地方...... :) 附:只是补充一下,除此之外,我还说:

  $('idofabutton').click(function(){
     $(this).data('clicked', true);
  });

PS2如果可以考虑将mo()传递给jquery函数,如果可以的话我可以轻松地将其重新传输到目标函数,那我会更好。

2 个答案:

答案 0 :(得分:1)

您可以使用引用您创建的数组的回调函数设置单击处理程序:



// display the contents of the array m
function mo(m) {
  $("#arraycontents").html(JSON.stringify(m));
}

function d() {
  var m = [];

  // build the array
  while (m.length < 10) {
    m.push([m.length, m.length * 2]);
  }

  // register the click callback
  $('#idofabutton').click(function(e) {
    mo(m);
  });
}

// call the function d() to build the array and register the click handler
d();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="idofabutton">Click Me!</button>
<div id="arraycontents"></div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

所以我确信有很多方法可以做到这一点,但这是一种方式。

var stillRun = true;

function execute(){
        setTimeout(function(){
            if(stillRun)
            {
            $("#someId").append("t")
            execute();
            }
        },10)
    }

$(document).ready(function(){
    $("#someButton").click(function(){
        alert("stop")
        stillRun = false;
    })
    execute();
})

基本上setTimeout使得点击实际上是可以访问的,并且页面也不会从无限循环中崩溃。

以下是JsFiddle.