2011-03-30 77 views
0

我我有一个函数,它使用$ .prompt Jquery(即兴)插件。这工作得很好,除了每当我调用函数时,它都会在函数结尾调用它。Jquery Impromptu函数运行顺序问题

下面是函数...

function addfile(){ 

    var txt = '<?php echo $JSString; ?>'; 

    function mycallbackform(v,m,f){ 
     if(v != undefined) 
     var newText = f.alertName + " , " + f.alertName.replace("-", " ").replace(".php", ""); 
     alert(newText); 
    } 

    $.prompt(txt,{ 
     callback: mycallbackform, 
     buttons: { Add: 'add', Cancel: 'cancel' } 
    }); 
} 

的PHP位只是增加了在HTML串并工作正常,问题用文字(即“这是一个提示”)时仍然occours。



每当我从JS调用addfile()它将最后运行。例如...

function newfunction() 
{ 
     prompt("Before"); 
     addfile(); 
     prompt("after"); 
} 

...将显示执行下列操作...

  1. 提示 - '之前'
  2. 提示 - '后'
  3. addfile();


不管我做什么了addfile()将始终运行最后这让我困惑。我对这些东西都很陌生,所以如果我做的事情真的很愚蠢,请不要害怕指出来。

注意:该函数位于我的php文件的标题中,以便<?php echo $JSString; ?>工作。我已经删除了php并将该函数插入到外部JS文件中,但同样的问题存在,所以它是$ .prompt,这似乎是导致问题而不是JS


有关如何获取此信息的任何想法JS非常感谢。
非常感谢

回答

1

你的提示函数是异步的,这就是为什么它接受一个回调函数作为参数。

试试这个:

prompt(
    txt, 
    {callback: function() { 
     addfile(); 
     prompt("after"); 
    }} 
); 
1

上面的做法是行不通的。下面是代码部分。在阻止页面之前正在显示警报。我正在使用blockUI

function blockPage(){ 
    $.blockUI({ 
     message: "<img src='loading.gif'/>", 
     color: 'transparent', 
     backgroundcolor: '#777777', 
     top: $(window).height()/2 
    }); 
    return true; 
} 

function dosomethingelse(){ 
    var aa; 
    var bb; 
    alert("c"); 
} 

function createOverlay(){ 
    var overlaySubmit = function(e,v,m,f){ 
     if(v === -1){ 
      alert("Closing the prompt"); 
      $.prompt.close(); 
      return false; 
     } else if(v === 1){ 
      dosomethingelse(); 
      //blockPage(); 
      return false; 
     } 
    }; 
    var prompt = $.prompt(
     "This is a test prompt", 
     { 
      opacity: 0.3, 
      buttons: {Add: 1, Cancel: -1}, 
      position: {x: 300}, 
      prefix: 'jqi', 
      submit: function(e,v,m,f){ 
       blockPage(); 
       try{ 
        alert(g); 
       } catch (err){ 
        alert("here"); 
       } 
       overlaySubmit(e,v,m,f); 
      } 
     }); 
    prompt.bind('promptsubmit',blockPage); 
} 
<!-- Ajax--> 
$('#ajax').click(function(){ 
    $.ajaxSetup({async:false}); 
    $.ajax({ 
      url: "test-server.txt", 
      success: function(response){ 
       createOverlay(); 
       return false; 
      }, 
      error: function(){ 
       return false; 
      } 
    }); 
});