2014-01-08 28 views
1

更新: 我使用了IE調試控制檯,事實證明「setSelectionRange」在IE中無效......爲什麼它可以從Visual Studio,但不是超出我的範圍,但基本上JS失敗了,並且從來沒有返回false ......所以現在的問題是:我如何以不同的方式對其進行編碼,以便IE能夠執行?我試圖尋找JQuery插件,但還沒有找到一個......javascript在部署的IE vs VS調試器,ff,chrome等中的工作方式不同

所以我有一些驗證完成了一些JavaScript和一些預填充以及一些文本框在GridView中。該代碼應該從onkeypress事件中調用。它在調試模式下工作得很好......字符僅限於數字,並且y和m按鍵自動填充/附加單詞年或月,並且光標正確地位於數字部分的末尾。它也適用於Chrome和FF。但是,我們公司的大部分公司都運行在IE9上(並且這個問題也發生在我的電腦上的IE10上)。一旦我部署了aspx頁面,IE用戶仍然會得到字符限制和自動填充,但字符y和m不會被抑制,並且光標位置不會發生,所以光標位於「9 Yearsy」或「6 Monthsm」的末尾。下面列出了javascript;我知道javascript實現背後有怪癖,但爲什麼只有在部署代碼後纔會發生。並就如何解決這一問題的任何建議,將不勝感激...

var timeFrame = function (evt, txtbox, max) { 
    if (evt.type != 'blur') { 
    var charCode = (evt.which) ? evt.which : event.keyCode; 
    if (charCode != 46 && charCode > 31 
        && (charCode < 48 || charCode > 57)) { 
        if (charCode == 121 || charCode == 109) { 
         if (charCode == 121) { 
          //fill with years 
          var entry = (txtbox.value); 
          var words = entry.split(' '); 
          if (max) { 
           txtbox.value = 'Maximum '.concat(words[1], ' Years'); 
           txtbox.setSelectionRange(8 + words[1].length, 8 + words[1].length); 
           return false; 
          } else { 
           txtbox.value = words[0].concat(' Years'); 
           txtbox.setSelectionRange(words[0].length, words[0].length); 
           return false; 
          } 

         } 
         if (charCode == 109) { 
          //fill with months 
          var entry = (txtbox.value); 
          var words = entry.split(' '); 
          if (max) { 
           txtbox.value = 'Maximum '.concat(words[1], ' Months'); 
           txtbox.setSelectionRange(8 + words[1].length, 8 + words[1].length); 
           return false; 
          } else { 
           txtbox.value = words[0].concat(' Months'); 
           txtbox.setSelectionRange(words[0].length, words[0].length); 
           return false; 
          } 

         } 
        } else { 
         return false; 
        } 
       } 
       var str = txtbox.value; 
       if (str != '') { 
        if (charCode == 46 && str.indexOf('.') !== -1) { 
         return false; 
        } 
        if (max) { 
         if (txtbox.value.indexOf('Maximum') == -1) { 
          txtbox.value = 'Maximum '.concat(str); 
          str = txtbox.value; 
         } 

         var words = str.split(' '); 
         if (isNaN(parseInt(words[1]))) { 
          txtbox.value = ''; 
         } else { 
          txtbox.setSelectionRange(8 + words[1].length, 8 + words[1].length); 
         } 
        } else { 
         var words = str.split(' '); 
         if (isNaN(parseInt(words[0]))) { 
          txtbox.value = ''; 
         } else { 
          txtbox.setSelectionRange(words[0].length, words[0].length); 
         } 
        } 


       } 
       return true; 

      } 
     } 
<asp:TextBox ID="TermTextBox" runat="server" Text='<%# Bind("Term") %>' onKeyPress="return timeFrame(event, this, false);" onKeyUp="timeFrame(event, this, false);" onblur="timeFrame(event, this, false);" MaxLength="25" Width="200px" /> 
+0

JavaScript控制檯中是否存在任何錯誤?順便說一句,這是像jQuery這樣的圖書館存在的原因之一 - 瀏覽器從來沒有JavaScript兼容。 – andyb

+0

不,VS沒有顯示任何錯誤,就像我說的那樣,它在FF中工作,所以使用螢火蟲不會顯示任何錯誤:/ – Jon

+0

IE9/10控制檯本身的錯誤呢?可能還有其他一些因素(IE兼容模式或其他JavaScript代碼)導致在IE中運行的已部署頁面的行爲不同。 – andyb

回答

1

之後什麼andyb說,我深入瞭解爲什麼setSelectionRange失敗...在IE瀏覽器,有兼容模式和文件模式......當我們的兼容模式運行IE9時,文檔模式默認爲id7標準。所以我添加了以下元標記到asp文件的頭部...

<meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 

...現在IE識別出這個命令,並且一切都很完美。

+0

太棒了!我認爲這會是這樣的。如果你願意,你可以「接受」你自己的答案:) – andyb

0

這只是一個猜測,但我認爲你可以嘗試檢查部署源代碼JavaScript代碼wasn`t是否精縮。你時間表方法可以縮短到像Xÿ,但你的onkeyup方法還包含非縮略名稱時間表

+0

看到我的更新... – Jon

相關問題