2015-08-20 6 views
1

Прямо сейчас я немного сложная ситуация, потому что у меня есть функция, генерирующая массив, который я хотел бы передать другой функции после нажатия кнопки. Для того, чтобы кристаллизовать его для вас, я говорю о СТГ, как это:Удерживайте вызов функции до тех пор, пока не нажмете

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); 
} 
} 

Вот именно, если у вас есть какие-либо предложения, пожалуйста, комментарий Я открыт для любых идей, но я предпочел бы придерживаться этой структуры программы, не перетасовывая ее или переписывая, потому что мне было сложно достать ее туда, где она есть ... :)
PS Просто добавить, рядом с этим я также сказал:

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

PS2 Если это возможно рассмотреть вопрос о принятии мо() функции Jquery, если это возможно, я буду с легкостью повторно передать его на Я думаю, что это было бы еще лучше.

ответ

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();
<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>

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.

Смежные вопросы