2010-07-05 159 views
0

我在使用Internet Explorer和Chrome瀏覽器的.click()事件時遇到了一些問題。jquery點擊事件問題

所以,我已經有了一個過濾器菜單:

<div id="filter-checkboxes" style="text-align: left; margin-bottom: 20px;"> 
    <input type="checkbox" id="crop-checkbox" onclick="init_filter('crop');" /> 
    <span id="crop-span">Crop</span> 
    <br /> 

    <input type="checkbox" id="resize-checkbox" onclick="init_filter('resize');" /> 
    <span id="resize-span">Resize</span> 
    <br /> 

    [...] 
</div> 

的init_filter(過濾器)呼籲在年底發送一個AJAX REQ

function apply(action) 
{ 
    var apply_btn = $("#apply-filter-btn"); 
    var values = null; 

    $(document).ready(function(){ 
     apply_btn.unbind("click"); 
     apply_btn.click(function(){ 
      switch (action) 
      { 
       case "crop": 
        values = "x=" + $("#x").val() + "&y=" + $("#y").val() + 
        "&w=" + $("#w").val() + "&h=" + $("#h").val(); 

        if ($("#w").val() !== "0" && $("#h").val() !== "0") 
         apply_send_req(action, apply_btn, values); 
       break; 
      } 
     }); 
    }); 
} 

的問題是,有另一個功能是實際請求發送之前的延遲。 這隻適用於Firefox ... 所以我問的是我該怎麼做才能防止這種情況?

回答

0

記住這段代碼都在一個函數裏面,我想你應該放下文檔就緒部分。如果您在加載時調用「apply」,則將調用包裝在文檔就緒語句中,而不是將其鏈接到函數中。這可能會解決您的問題,因爲您可能在添加到文檔就緒事件後觸發它。

function apply(action) 
{ 
    var apply_btn = $("#apply-filter-btn"); 
    var values = null; 

    apply_btn.unbind("click"); 
    apply_btn.click(function(){ 
     switch (action) 
     { 
      case "crop": 
       values = "x=" + $("#x").val() + "&y=" + $("#y").val() + 
       "&w=" + $("#w").val() + "&h=" + $("#h").val(); 

       if ($("#w").val() !== "0" && $("#h").val() !== "0") 
        apply_send_req(action, apply_btn, values); 
      break; 
     } 
    }); 
} 
+0

刪除.ready選擇確實有些幫助,但行爲並沒有firefox那麼快。我的意思是在Firefox中這個工作即時。但是,嘿,這不是我遇到的第一個問題:使用Internet Explorer :( – wikiz 2010-07-05 14:27:37

+0

@wikiz - 它似乎是一個與Internet Explorer的永恆掙扎,但版本9應該是一個巨大的改進! – Fenton 2010-07-06 06:54:48

+0

希望如此,我已經設法修復這個問題最終與.click()狀態無關......它與ajax請求的async:false選項有關 – wikiz 2010-07-06 07:38:26

0

只是在黑暗中刺傷,你是不是應該在文檔就緒區域內定義你的apply_btn,否則有可能不存在風險,你的var將會被定義爲?

$(document).ready(function(){ 
    var apply_btn = $("#apply-filter-btn"); // <-- inside .ready() 
+0

即使我在.ready()事件中定義了var apply_btn,最終結果也是一樣的。另一個解決方案(不是那麼好)將是每個過濾器都有一個應用按鈕......這可能會解決延遲問題......我不太確定,我沒有嘗試過,因爲我想盡可能減少代碼量 – wikiz 2010-07-05 13:37:58

+0

@wikiz:你確定*最終的結果是相同的,還是你只是*假設*? – 2010-07-05 13:55:37

+0

我剛剛用ready_btn var在ready選擇內部嘗試了它。 – wikiz 2010-07-05 13:59:25