2010-08-25 35 views
1

最初我試圖驗證用戶輸入,當我偶然發現一個問題時,我不能在聚焦時修復焦點在某個元素上的光標。這是代碼

$("#ChapterCode").keydown(function(e){ 
    if(e.keyCode==9 || e.keyCode==13){ 
     if($(this).val()!=""){ 
      ChapterCode(); 
      get_fees(); 
      return true; 
     }else{ 
      $(this).focus(); 
      return false; 
     } 
    } 
}); 

這將工作作爲返回false將點擊標籤改變時禁止焦點。 然而

$("#ChapterCode").focusout(function(e){ 
     if($(this).val()!=""){ 
      ChapterCode(); 
      get_fees(); 
      return true; 
     }else{ 
      e.preventDefault(); 
      $(this).focus(); 
      return false; 
     } 
    }); 

這不會工作相同的模糊任何幫助嗎?我加了e.preventDefault();知道它不會工作,以防萬一。非常感謝幫助,再次感謝。 請不要告訴我創建一個錯誤信息或類似的東西,因爲它只是沒有問題。

+0

我覺得這是一個事件的執行順序問題,事件的內容()運行其代碼的輸入失去焦點之前。 – Youssef 2010-08-25 09:46:07

回答

1

它看起來像不同的瀏覽器行爲。

Chrome它的工作原理就是這樣。您可以將焦點設置在blurfocusout之內。

FireFox不是這個。您需要將其包裝到setTimeout()中。

$("#ChapterCode").focusout(function(e){ 
    if($(this).val()!=""){ 
     ChapterCode(); 
     get_fees(); 
     return true; 
    }else{ 
     var self = $(this); 
     setTimeout(function(){ 
      self.focus(); 
     }, 1);    
     return false; 
    } 
}); 

這將挫傷重點#ChapterCode。你無法完全防止盒子失去焦點。您需要引入一個變量,該變量包含this引用,可通過關閉從setTimeout()訪問該變量。

例子:http://www.jsfiddle.net/hGjwZ/1/

+0

嗯有趣的想法生病檢查出來,並回復給你,謝謝:) – 2010-08-25 10:37:38

+0

男人你是吉尼斯它與IE瀏覽器Firefox和鉻合作感謝:D – 2010-08-25 10:47:44

+0

@Mhammad:歡迎,如果你認爲這個答案是有幫助的,你可能想「接受「它,標記爲正確的。 – jAndy 2010-08-25 11:03:53

相關問題