【发布时间】:2014-01-08 16:02:07
【问题描述】:
更新: 我使用了 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" />
【问题讨论】:
-
JavaScript 控制台中是否有任何错误?顺便说一句,这是 jQuery 之类的库存在的原因之一 - 浏览器从未与 JavaScript 兼容。
-
不,VS 没有显示任何错误,就像我说的,它在 FF 中有效,所以使用 firebug 也不会显示任何问题:/
-
IE9/10 控制台本身的错误怎么办?可能有其他因素(例如 IE 兼容模式或其他 JavaScript 代码)导致在 IE 中运行的已部署页面表现不同。
-
它在is supported 中
IE9+。页面是否以兼容模式呈现?按F12启动IE 控制台并查看“浏览器模式”和“文档模式”。除了 IE9 和 IE9(对于 IE9 浏览器)以外的任何东西都可能是它无法正常工作的原因。
标签: javascript asp.net internet-explorer visual-studio-2012