IE7 - javascript问题

时间:2014-11-11 16:27:51

标签: javascript jquery internet-explorer internet-explorer-7

我只在使用此js代码的旧IE浏览器上遇到问题:

var elements = [
        {'name':'manuscript_file', 'filetype':/(\.|\/)(doc|docx|txt|odt|zip|rar|rtf|gz|tar|bz2|bz|7z|tex)$/i},
        {'name':'presentation_file', 'filetype':/(\.|\/)(pdf)$/i},
        {'name':'figures_file', 'filetype':/(\.|\/)(pdf|png|jpg|gif|zip|rtf|eps)$/i},
        {'name':'graphical_file', 'filetype':/(\.|\/)(pdf|png|jpg|gif)$/i},
        {'name':'supplementary_file', 'filetype':/(\.|\/)(zip)$/i},
        {'name':'non_published_material', 'filetype':/(\.|\/)(doc|docx|zip|pdf)$/i},
    ]
    , url = $('form').attr('action');



$.each(elements, function(i, element) {
    $('#form_' + element.name).val('');
    $('#form_' + element.name).prev('button').removeAttr('disabled')
    ...

一致
 $('#form_' + element.name).val('');

IE7告诉我

Message: 'name' is null or not an object

有什么想法吗? THX。

1 个答案:

答案 0 :(得分:4)

这里的问题在于元素数组中的尾随逗号。 Internet Explorer 7错误地解释了最后一个逗号右侧的值。这使得长度为n + 1,从而导致jQuery在其最后一个循环中评估空值:

var elements = [
    { 'name': 'manuscript_file' },
    { 'name': 'non_published_material' }, <--
]

您可以通过循环两个数组来确认这一点;一个带尾随逗号,一个带逗号。在IE 7中打开http://jsfiddle.net/jonathansampson/mqntjbky/show/进行确认。

(function () {

    var elements = [
        { name: "Foo" }, 
        { name: "Bar" }
    ];

    var alternatives = [
        { name: "Fizz" }, 
        { name: "Buzz" },
    ];

    // This $.each will not throw an exception
    $.each( elements, function create ( i, element ) {
        try {
            $( "<div></div>" ).text( element.name ).appendTo( "body" );
        } catch ( e ) { alert( "Top fail: " + e.message ) }
    });

    // This $.each WILL throw an exception
    $.each( alternatives, function create ( i, element ) {
        try {
            $( "<div></div>" ).text( element.name ).appendTo( "body" );
        } catch ( e ) { alert( "Bottom fail: " + e.message ) }
    });

}());

下面注意&#34; Top失败&#34;永远不会引发消息,因为它在循环集合中的块中缺少一个尾随逗号。 &#34;底部失败&#34;但是,消息位于受影响的块中,因此在迭代期间会生成。

enter image description here