2015-10-15 124 views
-1

當一個事件觸發時,我有一段代碼將一些HTML附加到我的頁面 - 一個特定於我正在使用的插件的事件。 - 我坐在那裏有一個alert()如果語句阻止Javascript的線程?

當我刪除警報後,我的代碼沒有工作,只要追加該元素有關。

我才發現,alert()做兩件事情:

  1. 流行在一個盒子裏
  2. 提供給它的消息,暫停JavaScript是使用

(link to where I found this information)

線程當我抓撓我的下巴尋找解決方案時,一個想法突然出現在我的腦海中,並且它將這條線添加到alert()是:

if(1 == 1){} 

的想法,在這個video

我驚喜理應解決的段錯誤的錯誤,在YouTube上JsConf證明,它的工作! 那麼,它爲什麼工作?做if聲明實際上停止了javascript正在使用的線程?

代碼

我使用的jQuery插件,daterangepicker

$(document).ready(function() { 
    $('input[name="daterange"]') 
    .daterangepicker({ /* options */ }) 
    .on('hide.daterangepicker', function (ev, picker) { 
     if (elementExists) { 
     var name = $(this).attr('name'); 
     var pickedRange = $(this).val(); 

     if (notAppended) { 
      if (1 == 1) { 
      // 
      } 
      $('input[name="someinputname"]') 
      .parent('.form-group') 
      .append(
       '<div class="row"><br /></div>' + 
       '<div class="row messages">' + 
       '<div class="col-lg-8">' + 
       '<div class="alert alert-info">' + 
       '<p class="small">blablabalba</p>' + 
       '</div>' + 
       '</div>' + 
       '</div>' 
      ) 
      .find('.row.messages') 
      .fadeOut(20000); 
     } 
     } 
    }); 
}); 
+1

如果你真的發佈你的代碼會更好。 – Joseph

+0

需要更多信息。你可以添加你的工作代碼嗎? – DinoMyte

回答

1

不,if語句不會停止執行Javascript線程。對if語句進行評估,並根據if語句的結果選擇代碼執行的一個分支或其他代碼,並繼續執行代碼。沒有停頓。

alert() and prompt()是宿主函數的特例(同步Ajax),它們在完成之前暫停執行JS線程。常規Javascript語句(如if語句)不會停止執行。

如果引用線程提到的那樣,安裝一個alert() somehwere修復了Javascript中的一些問題,那麼通過更改計時問題正在解決一些錯誤的Javascript代碼。例如,如果有人試圖在結果準備好之前訪問異步Ajax調用的結果,有時插入一個alert()將「意外」通過延遲主JS線程來解決問題,直到異步結果真正準備就緒。這不是一個推薦的解決方案,只是插入alert()的副作用。正確的解決方案是修復代碼獲取異步結果的方式,以保證在沒有alert()的情況下可靠。

視頻中的段錯誤很可能是一種有缺陷的語言實現,它通過改變編碼語句的順序而意外解決。這不是Javascript語言中任何意圖的標誌。


如果你是認真理解爲什麼又說:

if(1 == 1){} 

以任何方式改變你的程序,那麼你就必須拿出相關的代碼(可能是在一些我們能夠實際執行),所以我們可以分析真正發生的事情。

+0

當然,它是。 –

+0

@HamzaOuaghad - 通過添加「if」語句解決了什麼問題? – jfriend00

+0

我追加的元素沒有被追加,如我的問題所述。 –