IE8中JS/JQuery问题:期望对象

3

虽然我经常在stackoverflow上浏览答案,但这是我在这里发布的第一篇帖子。我遇到的问题是IE8会不停地抛出"Object Expected"错误。我使用了IE8的开发工具,它指向了“mymh.js”文件。

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="/MyMHome/javascript/mymh.js"></script> 

mymh.js文件只有以下代码

    $(document).ready(function() {          

        $('#hNumber').focus();

        $('#ddlDir').change(function () {

            var selVal = $('#ddlDir').val();

             if (selVal == 'N' || selVal == 'S' || selVal == 'E' || selVal == 'W'){

             $.getJSON('/MyMHome/DimeServlet?strDir='+$('#ddlDir option:selected').val(), function(data) {

                    $('#ddlSt')
                    .find('option')
                    .remove()
                    .end()

                $.each(data, function(i,field){
                    var name = field;
                    $('#ddlSt')

                    .append('<option value= ' + '"' + name + '"' + '>' + name + '</option>');   
                    });
                });

                $('#ddlSt').focus();    
             }else{ 

                    $('#ddlSt')
                    .find('option')
                    .remove()
                    .end()
                    .append('<OPTION selected value="">Choose a direction first</OPTION>');

                }                   
        })
        .trigger('change');             

        $('#reset').click(function(){
             $('#ddlSt')
            .find('option')
            .remove()
            .end()
            .append('<OPTION selected value="">Choose a direction first</OPTION>'); 
             $('#hNumber').focus();                
        });

        $('#hNumber').bind('keyup', function() {
            if($('#hNumber').val().length == 5){
                    $('#ddlDir').focus();
            }
        });             

        $('#submitQuery').click(function(){
            var houseNumber = $('#hNumber').val();
            if(houseNumber.replace(/\s+/g, '').length == 0){
                alert('Please enter a house number.');
                $('#hNumber').focus();  
                return false;
            }else if( (!$.isNumeric(houseNumber)) || houseNumber.indexOf('-') > -1 || houseNumber.indexOf('.') > -1){
                alert('Please enter numbers only. You will be prompted later, if the address requires a suffix.');
                $('#hNumber').focus();  
                return false;
            }else if(houseNumber < 100 || houseNumber > 12999){
                alert('Please enter a house number between 100 and 12999');
                $('#hNumber').focus();
                return false;
            }else if($('#ddlDir option:selected').val() == 'none'){
                alert('Please select a street direction.');
                $('#ddlDir').focus();
                return false;
            }       
        });         

        $('form').keypress(function(e) {
              if (e.keyCode == '13') {
                 e.preventDefault();
                 if($('#ddlSt').is(":focus")){
                     $('#submitQuery').trigger('click');
                 }
                 else{
                     return false;
                 }
               }
        });
});

错误指向<script ... mymh.js></script>,但在调试器中它指向$document.ready(function() {
有人看到IE8为什么会不断抛出该错误吗?

你没有加载其他的JS库(比如prototype),对吧?另外,你应该尝试使用F12中的“开始调试”按钮;页面将重新加载,JS调试器会停在抛出异常的行上,这可能会更容易找到问题。 - kitti
我只加载了JQuery库作为JS库。而且我只导入了mymh.js文件作为外部JS文件。我会尝试使用调试器来查看发生了什么。 - wirey00
在mymh.js文件的第一行出现了“对象期望”的错误,该行代码为$(document).ready(function() {。 - wirey00
如果您在document.ready之前放置一个警告(alert),像这样alert($),它会返回[Object object]还是undefined? - marteljn
尝试使用 $(document.documentElement).ready(function(){ - Danilo Valente
你尝试过用jQuery替换掉第一个$吗?例如:jQuery(document).ready(function($) { /* code */ }); - rjz
5个回答

7

尝试在第16行的末尾放置一个分号

来自:

$('#ddlSt')
.find('option')
.remove()
.end()

$.each(data, function(i,field){

to

$('#ddlSt')
.find('option')
.remove()
.end();

$.each(data, function(i,field){

哎呀,我怎么会错过那个。这解决了我的问题。IE8真是个头疼的问题。它在其他浏览器上都能工作。 - wirey00

4
$(document).ready(function() { });  

这个语句可能会抛出“对象预期”的错误,原因如下:

首先,如果我们链接到外部JavaScript文件(例如jquery-1.8.2.min.js)的路径不正确。请确保链接的路径是正确的。我将我的文件放在“js”文件夹中,并给出了以下路径:

<script type="text/javascript" src="js/jquery-1.8.2.min.js"></script>  

第二、如果我们将脚本标签写成以下形式:
<script type="application/javascript"></script>  

替代

<script type="text/javascript"></script> 

4

在使用jQuery 2.0.0时,我遇到了在IE8中出现的问题。根据jQuery网站上的说明,“jQuery 2.x不支持Internet Explorer 6、7或8”。将jQuery 2.0.0替换为jQuery 1.10.2可以解决这个问题。


3

虽然这篇文章有些陈旧,但对于路过的人可能会有所帮助。我曾经遇到同样的问题,解决方法是在脚本标签中去掉defer属性。

<script type="text/javascript" defer="defer" src="js/libs/jquery-1.8.3.min.js"></script>

into:

<script type="text/javascript" src="js/libs/jquery-1.8.3.min.js"></script>

那对我有用。

3

这可能与问题无关,但我刚刚解决了IE8上的同类问题 - 在IE9和其他浏览器上运行良好的代码在IE8上出现问题。

答案就是简单地更改

 <script type="text/javascript" src="/myjavascript.js"></script> 
 <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>

为了

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="/myjavascript.js"></script> 

换句话说,首先使用JQuery。这对我解决了问题;可能会因人而异。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接