javascript在部署的IE vs VS调试器,ff,chrome等中的工作方式不同

时间:2014-01-08 16:02:08

标签: javascript asp.net internet-explorer visual-studio-2012

更新: 我使用的是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" />

2 个答案:

答案 0 :(得分:1)

在&yb说了之后,我深入研究了为什么setSelectionRange失败了...在IE中出现了兼容模式和文档模式......当我们的兼容模式运行ie9时,文档模式默认为id7标准。所以我在asp文档的头部添加了以下元标记...

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

......现在IE认识到这个命令,一切都很完美。

答案 1 :(得分:0)

这只是猜测,但我认为您可以尝试检查已部署的源代码是否您的javascript代码没有缩小。您的 timeFrame 方法可缩短为 x y ,但您的onKeyUp方法仍包含非缩短名称​​ timeFrame