更新: 我使用的是IE调试控制台,结果是“setSelectionRange”在IE中无效...为什么它可以从Visual Studio中运行,但不是在它之外是超出我的,但基本上JS在那条线上失败了,从来没有返回false ...所以现在的问题是:我如何以不同的方式编码,以便IE执行?我试图寻找JQuery插件,但还没有找到一个......
所以我已经通过一些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 :(得分:1)
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
......现在IE认识到这个命令,一切都很完美。
答案 1 :(得分:0)
这只是猜测,但我认为您可以尝试检查已部署的源代码是否您的javascript代码没有缩小。您的 timeFrame 方法可缩短为 x 或 y ,但您的onKeyUp方法仍包含非缩短名称 timeFrame