更新: 我使用了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" />
JavaScript控制檯中是否存在任何錯誤?順便說一句,這是像jQuery這樣的圖書館存在的原因之一 - 瀏覽器從來沒有JavaScript兼容。 – andyb
不,VS沒有顯示任何錯誤,就像我說的那樣,它在FF中工作,所以使用螢火蟲不會顯示任何錯誤:/ – Jon
IE9/10控制檯本身的錯誤呢?可能還有其他一些因素(IE兼容模式或其他JavaScript代碼)導致在IE中運行的已部署頁面的行爲不同。 – andyb