2011-03-30 78 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; 
      } 
    }); 
});