2013-04-01 136 views
0

我從我的jQuery腳本下面的代碼時,按Esc鍵被按下,使得一些改變一個div fnbtn,:jQuery的語句()無法正常工作

$(document).keypress(function(e){ 
    if(e.keyCode==27) { 
    if(window.discon==0) 
    { 
    window.discon = 1; 
    $("#fnbtn").replaceWith("<div id=\"fnbtn\"><p id=\"fnbtnp\">The variable is one...<br>Blah blah...<\/p><\/div>"); 
     } 
    else if(window.discon==1) 
    { 
    window.discon=2; 
    $.post(
     'do.php', 
     {doit: 4, uid: window.uid}, 
     function(rcvd) { 
     $("#fnbtn").replaceWith("<div id=\"fnbtn\"><p id=\"fnbtnp\">The variable is two...<br>Blah blah...<\/p><\/div>"); 
     $("#disp").append("<p><span id=\"cmnt2\">"+rcvd+"</span></p>"); 
     }); 
    //alert("Alert something here"); 
    } 
    } 
}); 

disp是另一個DIV附加從$.post請求收到的數據。該do.php文件包含一些MySQL的查詢,並聲明如下:

echo "This is the data returned from the do.php file"; 

這裏是我的問題。當我把這個腳本放在我的php文件中時,第一次按Esc時div fnbtn成功更改。但是當第二次按下Esc時,div fnbtn無法更改。我認爲這與$.post()請求有關。

但是,當我包括alert()聲明(目前已被註釋掉),一切正常,我可以看到所做的更改,然後按下警報框上的OK按鈕。

這個問題的原因是什麼?這是否是因爲在執行$("#fnbtn").replaceWith()$("#disp").append()語句之前$.post()請求已完成而引起的?以及如何包括alert()有所作爲?

您的幫助表示讚賞。提前致謝。 :-)

+0

我看不到如何添加該警報()會改變這是如何工作或不工作。我很想看看其他人說什麼。 – iGanja

+0

如果警報有所作爲,那麼這是一個非常好的指示,表明這是異步環境中的競爭條件或同步代碼。你確定你的頁面不爽嗎? –

+0

我確定我的頁面不夠清爽。但是,如果滿足特定的條件,它會不斷(每秒)查詢一個表格,並將一行或兩行文本附加到'#disp'。當你再次按下Esc鍵時,你是否認爲停止這個查詢,然後_then_嘗試以上操作將會起作用?但我認爲,因爲它的jQuery,它實際上並沒有刷新整個頁面,也沒有'#disp',只是附加到它。這有什麼區別嗎?@KevinB – rktcool

回答

0

如果您設置window.discon = 2這是不是意味着if(window.discon == 0)if(window.discon == 1)將返回false並且不會再次運行? 我已經試過你的代碼,對我來說它可以正常工作到上面提到的部分。添加alert()似乎沒有什麼區別,雖然它在$.post()完成之前運行。

不管我在那裏說什麼,似乎我並不完全明白你到底在說什麼。

在玩了一段代碼後,我沒有發現任何問題,所以它可能是因爲你有一個不同的腳本。 對我來說,它的工作原理與不alert()

你可以嘗試用一下代碼,還添加了.fail功能

$.post('do.php', {doit: 4, uid: window.uid}, function(rcvd) { 
      $rcvd = rcvd; 
     }).done(function(){ 
      $("#fnbtn").replaceWith("<div id=\"fnbtn\"><p id=\"fnbtnp\">The variable is two...<br>Blah blah...<\/p><\/div>"); 
      $("#disp").append("<p><span id=\"cmnt2\">" + $rcvd + "</span></p>");    
     }).fail(function(){ 
      alert('Could not reach do.php');   
     }); 

alert()唯一不同的是,該頁面被停止從進一步執行直到用戶點擊確定。這讓我覺得可能有一些其他腳本與此相沖突。

+0

到哪個部分? 'if(window.discon == 0)'應該第二次返回'false'。而且我不認爲'if(window.discon == 1)'第二次會返回'false' - 第二次按下Esc鍵時會出現'window.discon = 1'。我想我提到,當我添加'alert()'時,代碼工作的很好,你可以看到,它是在else if(window.discon == 1)塊中。任何幫助表示讚賞。 – rktcool